Block(六)内存管理与循环引用
00 分钟
2022-11-22
2022-11-22
type
status
date
slug
summary
tags
category
icon
password
之前的Block系列文章,我们已经对Block的方方面面都作了阐述,但是针对内存管理,我们还有最后一个需要讨论的话题——循环引用。
本文将会针对循环引用做一个讨论,同时,将会对Block涉及的内存管理做一个总结。

一、循环引用

1.1 自循环引用

Block内调用对象,对象拥有Block,导致产生的双向强引用——循环引用。
notion image
解决方法,就是打破该循环,利用__weak__unsafe_unretained来打破该循环。
  • __weak:不会产生强引用,指向的对象销毁时,会自动让指针置为nil。
  • __unsafe_unretained:不会产生强引用,不安全,指向的对象销毁时,指针存储的地址值不变,也就是僵尸对象。

1.2 __block导致的循环引用

使用__block导致产生的三角强引用——循环引用。
notion image
打破该三角循环,我们主动将person对象,在Block内部置为nil,但是需要主动调用执行Block

二、内存管理

下面总结了,捕获变量和内存管理的Block内如何处理。
notion image
到此,Block的部分,我们已经讲述完了。

参考

示例代码

  1. 循环引用