type
status
date
slug
summary
tags
category
icon
password
之前的
Block系列文章,我们已经对Block的方方面面都作了阐述,但是针对内存管理,我们还有最后一个需要讨论的话题——循环引用。本文将会针对循环引用做一个讨论,同时,将会对Block涉及的内存管理做一个总结。
一、循环引用
1.1 自循环引用
Block内调用对象,对象拥有Block,导致产生的双向强引用——循环引用。
解决方法,就是打破该循环,利用
__weak或__unsafe_unretained来打破该循环。__weak:不会产生强引用,指向的对象销毁时,会自动让指针置为nil。
__unsafe_unretained:不会产生强引用,不安全,指向的对象销毁时,指针存储的地址值不变,也就是僵尸对象。
1.2 __block导致的循环引用
使用
__block导致产生的三角强引用——循环引用。
打破该三角循环,我们主动将
person对象,在Block内部置为nil,但是需要主动调用执行该Block。二、内存管理
下面总结了,捕获变量和内存管理的Block内如何处理。

到此,Block的部分,我们已经讲述完了。
参考
示例代码