IOS 在ARC下解决你的内存泄漏

由于最近在项目重构,所以需要忙的也很多,今天统一解决了应用内很多页面在退出后并没有调用delloc方法导致内存泄漏的问题,下面分析下几大原因:

1、声明delegate为strong类型,简而言之,如果父VC持有子VC,并设置子VC的delegate为self(也就是父VC),这样的结果就是子VC也间接持有了父VC,造成循环引用,在Pop子VC的时候不会调用delloc。

2、timer是否持有self,我们一般要执行一个timer的时候会用(NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti  target:(id)aTarget  selector:(SEL)aSelector  userInfo:(id)userInfo  repeats:(BOOL)yesOrNo   这里的aTarget一般是self,这时候就需要注意了,如果在你退出的时候这个timer还在执行的话由于这个timer会持有self,所以delloc也不会调用,这里可以用weakSelf代替self也是没有问题的。

3、最常见的就是block导致的循环引用,由于在重构APP中用到了MVVM架构,使用了大量的信号机制,导致block到处飞(哈哈),解决的最多的就是这种了,解决方法也很简单,就是在block外声明__weak type(self) weakSelf = self,在block中用weakSelf就可以了,还有就是在block中如果使用了成员变量的下划线形式也要改成weakSelf.PropertyName的形式。MVVM中定义了宏对@weakify(self)和@strongify(self)可以理解为__weak type(self) weakSelf = self的简化形式,可以拿来直接使用。

以上就是VC销毁时需要注意的问题,如有交流,请留言。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS内存泄漏的常见情况 1.声明delegate为strong类型,简而言之,如果父VC持有子VC,并设置子VC...
    husky_duang阅读 13,400评论 0 2
  • iOS内存泄漏的常见情况 1.声明delegate为strong类型,简而言之,如果父VC持有子VC,并设置子VC...
    husky_duang阅读 9,033评论 0 19
  • 一.哪些时候会出现内存泄露 1.声明delegate为strong类型,简而言之,如果父VC持有子VC,并设置子V...
    Handyzzz阅读 3,283评论 0 0
  • iOS内存管理机制的原理是引用计数,引用计数简单来说就是统计一块内存的所有权,当这块内存被创建出来的时候,它的引用...
    醉了个舟阅读 1,891评论 1 1
  • 今早看了一篇关于熬夜的文章,认识到了晚上熬夜刷手机的危害,于是果断决定从周一开始早睡,准备睡觉的时间为十点...
    绾小妞阅读 2,994评论 0 0