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;}