码迷,mamicode.com
首页 > 移动开发 > 详细

IOS中POP控制器 但是并没有被销毁

时间:2016-04-16 17:02:48      阅读:459      评论:0      收藏:0      [点我收藏+]

标签:

周六加班,真是个让人悲伤的故事。今天改BUG的时候 发现了一个问题,我的控制器注册了几个监听方法。当我pop掉这个控制器的时候,看似是从栈里移除掉了,然而当广播发来的时候,依旧响应了监听方法,这就很尴尬了。于是我跟踪了一下代码,发现当我pop之后根本没有走到deinit方法(swift) 也就是OC中的dealloc 方法。好吧,今天我就总结一下 当碰到这种情况的时候如何去 找到问题,或者说 在我们平时写代码的时候 如何避免这些问题发生。

归根结底,这种情况的发生就是当前控制器被某个对象强引用,在控制器pop 的时候count没有减为0,引用计数器不为0 系统就不会为你释放这部分内存。

我总结了一个,控制器没有被销毁无非就以下三种情况:

1.block块使用不当。因为blocak会对方法中的变量自动retain一次。所以,大家先检查以下自己控制器中的blocak代码。具体怎么写就不说了,weak。

2.计时器NSTimer没有被销毁,记得在viewWillDisappear之前把控制器用到的计时器销毁。

3.控制器中的代理一定要用弱引用,不要用强引用。 (这点应该是出现最少的情况,相信大家最初学习IOS代理这块的时候,已经被告知“先就这么写,不要管为什么”,于是基本上大家都是写成weak)

好了,这是今天在工作中碰到的问题,给大家分享下,如果有别的高见,请在下面留言。

IOS中POP控制器 但是并没有被销毁

标签:

原文地址:http://www.cnblogs.com/ghb-666/p/5398424.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!