ios在UIViewController中不走dealloc或者导致Memory Leak的原因

自从项目中导入MyLeaksFinder以来,项目中就经常会报Memory Leak的提示,经过几次调试终于总结到这种情况可能出现的几种原因:

1,VC中使用了NSTimer计时器,使用计时器当VC进行push ——pop之后,如果NSTimer对象没有进行销毁,就会造成内存泄漏,也就是引用了当前VC,导致控制器的引用计数加1,如果没有将这个NSTimer 销毁,它将一直保留该VC,无法释放,也就不会调用dealloc方法。所以,需要在viewWillDisappear之前需要把控制器用到的NSTimer销毁。

销毁方法:[timer invalidate]; // 销毁timer

timer = nil; //nil

或者在GCD中的销毁方法:

dispatch_source_cancel(_timer);


2,Block代码块中使用了强引用self,容易造成循环引用,对象长时间不能释放而引起的。

具体可以:

#define WS(weakSelf)  __weak __typeof(self)weakSelf = self;

使用弱引用weakSelf来代替self,

或者项目在回调代码块中调用内部成员变量及属性时的self.name或者_name都会引起循环引用,具体方法同上。




3,就是可能在项目VC中采用的代理方法属性的代理不是weak属性具体的方法如下:

:@property (nonatomic, weak) id delegate;


剩下具体还可能造成的原因还在进一步探索中,如果有新的可能造成的原因也欢迎大家在评论区补充,祝大家前程似锦!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值