频道栏目
首页 > 资讯 > 其他 > 正文

block块中引用成员变量引起内存泄漏问题

17-06-20        来源:[db:作者]  
收藏   我要投稿

block块中引用成员变量引起内存泄漏问题

使用block要注意循环引用,因此在块中使用self前先使用__weak修饰生产弱引用

这里记录另一种情况:没有使用属性而是直接使用成员变量的时候

//  私有成员变量
@implementation SmartInfoViewController
{
    UIColor *lightColor;
    BOOL _isLoading;
}
//  在块中直接使用lightColor会造成retain cycle
self.colBlock = ^(UIColor *col) {
    lightColor = col; 
    // 等价于 self->lightColor = col;
;
//  使用前先生成弱引用 
__weak typeof(self) ws = self;

paint.colBlock = ^(UIColor *col) {
    // 必须在内部__strong强引用
    __strong typeof(ws) ss = ws;
    ss -> lightColor = col;
};

上边介绍的成员变量是对象类型的,如果是基础数据类型的怎么办?

// 通过创建一个方法,然后再调用
paint.colBlock = ^(UIColor *col) {
    [ws resetIsLoading];
};
-(void)resetIsLoading{
    _isLoaing = NO;
}

 

相关TAG标签
上一篇:Android studio实现按钮的点击事件
下一篇:Android中的异步消息
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站