Tôi ngạc nhiên khi thấy những hành vi sau đây ...Các khối giữ lại chu kỳ từ quy ước đặt tên?
@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);
}];
}
Trong Xcode 4.6.1 tôi nhận được một cảnh báo trong việc thực hiện -doSomethingWithBar:
rằng "chụp 'tự' mạnh mẽ trong khối này là khả năng dẫn đến một giữ chu trình. "
Tuy nhiên, nếu tôi đổi tên tên của phương thức -addBar:withCompletion:
thành -setupBar:withCompletion:
cảnh báo này sẽ biến mất. Dường như sự ngạc nhiên của tôi bằng cách này minh họa tôi đã có một khoảng trống trong kiến thức của tôi về các quy ước đặt tên Objective-C!
Thử biên dịch lại. Cảnh báo không phải là "đi xa", nhiều như Xcode là ngu ngốc và đỏ bừng các cảnh báo LLVM tạo ra thời gian qua xung quanh – CodaFi