ARC环境下block循环引用解决方法
2015-04-08 14:45
411 查看
__weak typeof(self)修饰:
- (IBAction)onTest:(id)sender {
BlockDemo *demo = [[BlockDemo alloc]init];
__weak typeof(BlockDemo) *weakDemo = demo;
[demo setExecuteFinished:^{
if (weakDemo.resultCode ==
200) { // 这里调用.语法不会循环引用
NSLog(@"call back ok.");
}
}];
[demo executeTest];
}
//方法二:
+ (BlockDemo *)blockdemo {
return OBJC_AUTORELEASE([[BlockDemo alloc]init]);
}
//这样用:
- (IBAction)onTest:(id)sender {
BlockDemo *demo = [BlockDemo blockdemo];//[[BlockDemo alloc]init];
[demo setExecuteFinishedParam:^(BlockDemo * ademo) {
// 把自身传递回来
if (ademo.resultCode ==
200) {
NSLog(@"call back ok.");
}
}];
[demo executeTest];
}
//不管是在外面init,还是在里面,且没有加__block
及__weak。如果是回调,比较喜欢把自身当作参数传到block中。这样期实是编译器给我们做了弱引用。因此不会产生循环引用。
- (IBAction)onTest:(id)sender {
BlockDemo *demo = [[BlockDemo alloc]init];
__weak typeof(BlockDemo) *weakDemo = demo;
[demo setExecuteFinished:^{
if (weakDemo.resultCode ==
200) { // 这里调用.语法不会循环引用
NSLog(@"call back ok.");
}
}];
[demo executeTest];
}
//方法二:
+ (BlockDemo *)blockdemo {
return OBJC_AUTORELEASE([[BlockDemo alloc]init]);
}
//这样用:
- (IBAction)onTest:(id)sender {
BlockDemo *demo = [BlockDemo blockdemo];//[[BlockDemo alloc]init];
[demo setExecuteFinishedParam:^(BlockDemo * ademo) {
// 把自身传递回来
if (ademo.resultCode ==
200) {
NSLog(@"call back ok.");
}
}];
[demo executeTest];
}
//不管是在外面init,还是在里面,且没有加__block
及__weak。如果是回调,比较喜欢把自身当作参数传到block中。这样期实是编译器给我们做了弱引用。因此不会产生循环引用。
相关文章推荐
- **ios 解决Block内用self循环引用的方法**
- 解决block循环引用的三种方法
- MRC和ARC环境下如何防止Block循环引用
- Block的引用循环问题 (ARC & non-ARC)
- block使用小结、在arc中使用block、如何防止循环引用
- OC_语法入门_day6_ARC(循环引用)/block代码块(闭包)/protocol协议(接口)/代理模式
- block使用小结、在arc中使用block、如何防止循环引用
- block使用小结、在arc中使用block、如何防止循环引用
- Block的引用循环问题 (ARC & non-ARC)
- 循环引用的解决方法
- block使用小结、在arc中使用block、如何防止循环引用
- block使用小结、在arc中使用block、如何防止循环引用
- block使用小结、在arc中使用block、如何防止循环引用(zz)
- block使用小结、在arc中使用block、如何防止循环引用
- Block的引用循环问题 (ARC & non-ARC)
- Block使用中的一些疑问解答(包括循环引用问题的解决)
- block使用小结、在arc中使用block、如何防止循环引用
- “SET 命令设置的环境变量在 FOR 循环中始终为空”问题的原因与解决方法
- ARC下的block导致的循环引用问题解析
- block使用小结、在arc中使用block、如何防止循环引用