ARC mit Blöcken und Haltezyklen

Ich habe eine Klasse, die einen Block als Objekteigenschaft enthält:

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

wo SFFailureBlock:

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

Ich habe eine Operation auch als Objekteigenschaft deklariert (AFHTTPRequestOperation) und möchte, dass sie den Fehlerblock aufruft, sobald er abgeschlossen ist.

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

Ich erhalte die Compiler-Warnung "Wenn Sie in diesem Block stark" self "erfassen, führt dies wahrscheinlich zu einem Beibehaltungszyklus." Ich habe im Internet gesucht, aber ich konnte keine vernünftige Lösung finden, warum dies zu einem Beibehaltungszyklus führt. Ich rufe nirgendwo im Block 'Selbst' an.

Eine andere seltsame Sache ist, dass der Compiler mich nicht warnt, wenn ich 'self.failureBlock (error)' schreibe!

Kann mir jemand erklären, was los ist? Ich muss ernsthaft etwas in den ARC-Speicherverwaltungsregeln vermissen, kann es aber nicht herausfinden.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage