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!