В настоящее время я думаю о том, как предотвратить сильные циклы ссылок при использовании блоков, которые сохраняют себя. Обычный способ, кажется, состоит в том, чтобы просто использовать слабую ссылку на себя:
@property (strong, nonatomic) NSOperationQueue *queue;
- (void)methodA {
__weak id *weakSelf = self;
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
[weakSelf methodB];
}];
[self.queue addOperation:operation];
}
Но что, если methodB выглядит так:
- (void)methodB {
[self someOtherMethod];
}
Будет ли это по-прежнему вызывать сильный эталонный цикл? Или метод B получит слабую ссылку на себя от метода А в качестве ссылки на себя? (То есть, является ли ссылка метода B на себя просто строгой ссылкой на слабую ссылку из метода A?)
free
d, аrelease
d (сохранить счет--), поэтому, когда блок завершится, объект будет уничтожен, так что вероятно все будет в порядке. - person trojanfoe   schedule 10.12.2012