我很惊讶地发现以下行为...
@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:
的实现中收到一个警告,“在此块中强制捕获 'self' 可能导致保留循环。”然而,如果我重构方法 -addBar:withCompletion:
的名称为-setupBar:withCompletion:
,则此警告消失了。这似乎表明我对 Objective-C 命名约定的知识有所缺失,这让我感到惊讶!