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, но не могу этого понять.

Ответы на вопрос(1)

Ваш ответ на вопрос