Как UIControl управляет своей целью?

Яблоко:

// 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 управлять целью, почему цель не выпущена?

1 ответ

Решение

bk_addEventHandler:forControlEvents: метод сохраняет BKControlWrapper экземпляры, добавив его в NSMutableSet, Этот набор сохраняется events словарь, который сохраняется самим элементом управления, потому что словарь связан с элементом управления с помощью OBJC_ASSOCIATION_RETAIN_NONATOMIC,

Это импорт, который блок вы передаете bk_addEventHandler:forControlEvents: не создавать цикл сохранения. Вы должны сделать это, убедившись, что блок использует слабые ссылки, где это необходимо (например, если ему нужно обратиться к контроллеру представления, а не к элементу управления).

Другие вопросы по тегам