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

Posted 多两口

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了block块中引用成员变量引起内存泄漏问题相关的知识,希望对你有一定的参考价值。

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

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

//  私有成员变量
@implementation SmartInfoViewController
{
    UIColor *lightColor;
}

//  在块中直接使用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;
};

 

以上是关于block块中引用成员变量引起内存泄漏问题的主要内容,如果未能解决你的问题,请参考以下文章

查找由智能指针引起的内存泄漏

内存泄漏

android内存泄漏

Java 内存泄露总结

iOS开发——Block引起循环引用的解决方案

片段 - 全局视图变量与本地和内部类侦听器和内存泄漏