iOS 循环引用导致内存泄漏

我请问下,iOS 循环引用导致内存泄漏
最新回答
吃酸奶舔瓶盖

2024-04-26 02:07:21

singleton是实例对象, self 持有 singleton , singleton持有Block, Block持有 self ,也可直接理解为 self 持有 singleton , singleton 持有 self,当self需要释放的时候,singleton是不需要释放的,但是 singleton 持有self 导致 self 不能被释放,因此,self 无法被释放,导致内存泄漏。

一、Block 回调造成的循环引用

二、NSTimer 强持有self

解决办法,使用 __weak typeof(self)weakSelf = self; 弱化self,打破循环引用(必要的时候我们还需要在block内部声明 strongSelf ,为防止weakSelf因为某种原因在block里提前释放使得weakSelf=nil,变成野指针,导致后边再调用weakSelf 造成崩溃)。示例如下

Timer 销毁请看此文: iOS Timer 详解