Blöcke behalten Zyklus von der Namenskonvention?

Ich bin überrascht, das folgende Verhalten zu finden ...

@interface Foo : NSObject

- (void)addBar:(id)aBar withCompletion:(void(^)(void))completion;

@end

@interface AwesomeClass : NSObject

@property (strong, nonatomic) Foo *foo;

- (void)doSomethingWithBar:(id)bar;

@end

@implementation AwesomeClass

- (void)doSomethingWithBar:(id)bar
{
    [self.foo addBar:bar withCompletion:^{
        NSLog(@"%@", self.foo);
    }];
}

In Xcode 4.6.1 bekomme ich eine Warnung bei der Implementierung von-doSomethingWithBar: dass "Das starke Erfassen von 'Selbst' in diesem Block wahrscheinlich zu einem Beibehaltungszyklus führt."

Allerdings, wenn ich das refactorName der Methode-addBar:withCompletion: zu-setupBar:withCompletion: Diese Warnung verschwindet. Es scheint, dass meine Überraschung zeigt, dass ich eine Wissenslücke in Bezug auf Objective-C-Namenskonventionen habe!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage