ARC z blokami i zachowuje cykle

Mam klasę, która przechowuje blok jako właściwość obiektu:

@property (nonatomic, readwrite, copy) SFFailureBlock failureBlock;

gdzie SFFailureBlock:

typedef void (^SFFailureBlock)(NSError *error);

Mam operację zadeklarowaną również jako właściwość obiektu (AFHTTPRequestOperation) i chcę, aby wywołanie to zakończyło się niepowodzeniem.

    [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");
}];

Dostaję ostrzeżenie kompilatora „Mocne przechwycenie„ siebie ”w tym bloku może doprowadzić do zatrzymania cyklu”. Przeszukałem internet, ale nie mogłem znaleźć porządnego rozwiązania, dlaczego to prowadzi do utrzymania cyklu. Nigdzie nie nazywam „siebie” wewnątrz bloku.

Inną dziwną rzeczą jest to, że jeśli piszę 'self.failureBlock (błąd)', kompilator nie daje mi żadnego ostrzeżenia!

Czy ktoś może mi wyjaśnić, co się dzieje? Muszę poważnie przegapić coś w regułach zarządzania pamięcią ARC, ale nie mogę tego zrozumieć.

questionAnswers(1)

yourAnswerToTheQuestion