如果一个控制器被循环引用了,那么这个控制器pop后不会调用dealloc方法,iOS中常见的循环引用以及解决方法如下:
- 如果使用了代理,代理要使用weak修饰,否则会产生循环引用
- 如果使用到了NSTimer,可能产生循环引用,最简单的解决办法就是使用GCD定时器代替
- block内部使用weakSelf(也不全是,视情况而定)
- 如果有网络请求等等的,有可能网络请求中使用强指针保存了self,这时候如果在当前界面保存网络请求就需要用weak
- 如果当前VC保存了另外一个VC2,比如:当前VC保存了一个当前导航控制器push出来的VC2,因为导航控制器的栈中已经有这个VC2了,所以保存这个VC2只能使用weak,否则VC2在pop后并不会调用dealloc方法,因为VC还在强引用着它,所以必须使用weak来保存VC2
网友评论