我很驚訝地發現以下行爲......塊保留命名約定的循環?
@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);
}];
}
在Xcode中4.6.1我得到的-doSomethingWithBar:
的實現,「捕獲‘自我’強烈該塊很可能會導致一個警告保留週期「。
但是,如果我重構方法-addBar:withCompletion:
的名到-setupBar:withCompletion:
此警告消失。這似乎令我驚訝,說明我在Objective-C命名約定方面的知識存在差距!
嘗試重新編譯。警告不會「消失」,就像Xcode是愚蠢的,並刷新LLVM最後一次產生的警告 – CodaFi 2013-03-20 22:42:45