您的位置:首页 > 其它

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中。这样期实是编译器给我们做了弱引用。因此不会产生循环引用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: