您的位置:首页 > 产品设计 > UI/UE

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

2018-03-16 10:32 363 查看
自从项目中导入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;
剩下具体还可能造成的原因还在进一步探索中,如果有新的可能造成的原因也欢迎大家在评论区补充,祝大家前程似锦!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: