苹果:
// the action cannot be NULL. Note that the target is not retained.
- (void)addTarget:(nullable id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
请注意,目标不会保留。
在UIControl + BlocksKit.m
中BKControlWrapper *target = [[BKControlWrapper alloc] initWithHandler:handler forControlEvents:controlEvents];
[handlers addObject:target];
[self addTarget:target action:@selector(invoke:) forControlEvents:controlEvents];
那么UIControl
如何管理目标,为什么目标没有被释放?
答案 0 :(得分:0)
bk_addEventHandler:forControlEvents:
方法通过将BKControlWrapper
实例添加到NSMutableSet
来保留events
个实例。该集由OBJC_ASSOCIATION_RETAIN_NONATOMIC
字典保留,该字典由控件本身保留,因为字典使用bk_addEventHandler:forControlEvents:
与控件相关联。
传递给$ cd <path/to/folder>
的块不会创建保留周期。您必须通过确保块在需要的地方使用弱引用(例如,它需要引用视图控制器而不是引用控件)来执行此操作。