我有一个将块作为对象属性的类:
@property (nonatomic, readwrite, copy) SFFailureBlock failureBlock;
其中SFFailureBlock:
typedef void (^SFFailureBlock)(NSError *error);
我有一个操作也声明为对象属性(AFHTTPRequestOperation),我希望它在完成后调用失败块。
[self.operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
__weak NSError *error = [NSError errorWithDomain:@"com.test" code:100 userInfo:@{@"description": @"zero results"}];
failureBlock(error);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"nothing");
}];
我收到一个编译器警告“在此块中强烈捕获 'self' 可能会导致保留周期”。我已经搜索了互联网,但我找不到一个体面的解决方案来解释为什么这会导致保留周期。我不会在任何地方的街区内称呼“自我”。
另一个奇怪的事情是,如果我写'self.failureBlock(error)',编译器不会给我任何警告!
谁能向我解释发生了什么事?我一定严重遗漏了 ARC 内存管理规则中的某些内容,但我无法弄清楚。