ARC с блоками и сохранением циклов
У меня есть класс, который содержит блок как свойство объекта:
@property (nonatomic, readwrite, copy) SFFailureBlock failureBlock;
где SFFailureBlock:
typedef void (^SFFailureBlock)(NSError *error);
У меня есть операция, также объявленная как свойство объекта (AFHTTPRequestOperation), и я хочу, чтобы он вызывал блок сбоя после его завершения.
[self.operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
__weak NSError *error = [NSError errorWithDomain:@"com.test" code:100 userInfo:@{@"description": @"zero results"}];
failureBlock(error);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"nothing");
}];
Я получаю предупреждение компилятора "Захват" себя ". Сильно в этом блоке, вероятно, приведет к сохранению цикла ". Я искал в Интернете, но не смог найти достойного решения относительно того, почему это приводит к сохранению цикла. Я не называю себя "я" внутри блока где угодно.
Еще одна странная вещь заключается в том, что если я напишу «self.failureBlock (error)» компилятор не дает мне никакого предупреждения!
Может кто-нибудь объяснить мне, что происходит? Я, должно быть, серьезно упускаю что-то в правилах управления памятью ARC, но не могу этого понять.