码迷,mamicode.com
首页 > 其他好文 > 详细

deleage 心得

时间:2017-07-28 01:00:02      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:指针   原因   ios 开发   界面   osd   框架   公司   野指针   tab   

iOS Delegate 的一些理解

转载2015-08-21 14:20:35

        做 iOS 开发已经有段时间了,最近才意识到原来 Delegate 还有这样的坑。可能是之前对 Delegate 的理解还不够彻底吧。

现象

        今天遇到一个 bug 场景是 :从 A 界面 Push到 B 界面,B 界面有遵守一个UITabBarControllerDelegate的Delegate。? 然后B 界面在 POP 回 A 界面。再点击界面上的 TabBarItem 的时候应用就闪退了.

原因

        因为这个应用是有UITabBarController 的它是一个整体的框架是全局的。也就是说UITabBarControllerDelegate 在整个应用是一直存在,它知道谁和我签了协议。当 B 界面由 A 界面 push 进来的时候 UITabBarController知道 B 界面和我签了协议。可是 B 界面 pop 走了以后 由于是 UINavigationController 。POP 后回自动管理整个堆栈将 B 界面释放掉。

解决?

在 B 界面离开以后将 B 界面遵守的?UITabBarControllerDelegate置为 nil 。

心得?

之前一直以为内存被释放掉了相应的所有信息都会被回收。但是?Delegate不一样,B 界面只是去遵守UITabBarControllerDelegate 并不是UITabBarControllerDelegate的持有者,恰好点击 toolBarItem 的时候会去触发UITabBarControllerDelegate 的协议。UITabBarControllerDelegate再看看 现在谁和我签署了协议。这个时候看到 B 界面在遵守协议,可是 B 界面已经没有了。在 iOS 里面向一个野指针发消息会引起应用的闪退。

?Delegate :就好比一份合同,在合同规定事项里面你才可以做一系列的事情,可是由于乙方单方面的"解除合同",而甲方依旧会给乙方发"订单",等到结算的时候乙方变成了"空壳公司",这个时候甲方就开始"大发雷霆?"

deleage 心得

标签:指针   原因   ios 开发   界面   osd   框架   公司   野指针   tab   

原文地址:http://www.cnblogs.com/dannygao/p/7248082.html

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