首页 > 其他 > 详细

处理block中调用对象实例变量导致的循环引用

时间:2014-02-21 02:06:22      阅读:304      评论:0      收藏:0      [点我收藏+]

      在传入block的类的dealloc方法中加断点后,dealloc方法没有被调用,确认如果在block中直接引用对象的实例变量也会引起循环引用。比较常规的解决办法就是用weak self + property的方式解决。但是个人一直觉得属性是用来向外公开的,类内部用的变量不应该用属性的方式实现。所以折腾了半天,有了以下的解决方案:

@interface TestVC (){
    BOOL _isToOuter;
}
@end

@implementation TestVC
-(void)test{
NeedABlockObj* obj=[[NeedABlockObj alloc] init];
        
        __typeof (&*self) __weak weakSelf = self;
        obj.aBlock = ^(int to){
  //不把weak 转为strong,则无法编译通过。
            __typeof (&*self)  strongSelf = weakSelf;
            
            strongSelf->_isToOuter = YES;
        };
}
@end

处理block中调用对象实例变量导致的循环引用

原文:http://blog.csdn.net/gaoyp/article/details/19539079

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!