Cover image
Hero image

托码特人

分享科技与人文

一个关注互联网的技术博客

dealloc方法不个执行的三种最大可能

因为

今天写代码时需要在 dealloc 里移除所有的通知,但是却发现控制器 pop 后不执行 dealloc 方法.

查到这句话:The dealloc method was not being called if any of the references held by a viewcontroller were still in memory.

dealloc 方法没有被调用是因为控制器的一个或多个强引用仍然在内存中,也就是说当前控制器的计数器不为 0.

所以

一般的原因有以下几种:

  1. 定制器没有被销毁,解决方法:在 viewWillDisappear 之前需要把控制器用到的 NSTimer 销毁;
  2. block 块使用不当,因为 block 会对方法中的变量自动 retain 一次, 请检查控制器中 block 代码;
  3. 代理必须得用 weak 修饰,用 strong 强引用会导致计数器加 1,无法释放内存;
  4. 在 getter 方法里使用 self,导致死循环;

Block 体内使用实例变量也会造成循环引用,使得拥有这个实例的对象不能释放

赞赏

声明: 本文内容由托码斯创作整理,由于知识水平和时效性问题,行文可能存在差错,欢迎留言交流。读者若需转载,请保留出处,谢谢!