ARC下的block导致的循环引用问题解析

简介:

ARC下的block导致的循环引用问题解析

更详细细节请参考 http://blog.sina.com.cn/s/blog_8c87ba3b0101m599.html

 

ARC下,copy到堆上的block,会强引用进入到该block中的外部变量.这很容易导致循环引用的问题.

比方说:

一个VC(这里指一个controller)中有一个属性为model.VC强引用了它.

VC --> model

这个model呢,里面有一个copy属性的block,该block赋值如下如下.model.demo = ^{

    ......

};

如果这个......没有传VC进来,还好,不会强引用VC,如果是下面的情况:

model.demo = ^{

    ......

    [test getValue:self];

};

那,直接导致的后果就是,这个model强引用了这个VC.

model --> VC

这就造成了一个循环.即使这个VC被pop掉了,垃圾回收机制也无法释放这个VC了,因为,它检测到了这个VC被model强引用了.

 

 

所以,在ARC下面使用block,无论怎样,你都需要注意这几点:

1.  外部对象进入block,请使用__weak修饰后再进入到block中

2.  不要在block中初始化对象,请在block的外面初始化对象后再进入到block中去

3.  无论该block是不是copy的,请都当做copy的block来处理

4.  传入到堆区block中的对象会被强引用

目录
相关文章
|
6月前
|
安全 程序员
单例 ARC下以及MRC 一句代码搞定
单例 ARC下以及MRC 一句代码搞定
22 0
你知道block循环引用怎么解决了吗?
在使用block的时候,最需要注意的问题便是循环引用,这节主要讲解,block是如何产生的?碰到循环引用又该怎么解决。
140 0
你知道block循环引用怎么解决了吗?
Block循环引用
Block循环引用
71 0
|
iOS开发
block的循环引用分析
block的循环引用分析
116 0
block的循环引用分析