1
我有其保持块作为对象属性的类:ARC与块和保持周期
@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.failureBlock(错误)'编译器不给我任何警告!
任何人都可以向我解释发生了什么事吗?我必须认真思考ARC内存管理规则中的某些内容,但我无法弄清楚。
除非我误解了,否则在示例__weak或__unsafe_unretained中创建xFailureBlock也可能是一个好主意。 – 2012-07-28 02:06:38
我相信但不知道xFailure auto var for failure块会复制块(然后由封闭块捕获)。 – 2012-07-28 12:55:53
我明白了。但是,不是failureblock是控制器的实例属性吗?我认为一般情况下,当我们做一些像“[self.myarray addObject:anObject];”在一个块内,“myArray”不会被保留。我错了吗? – csotiriou 2012-07-29 15:07:49