您好,匿名用户
随意问技术百科期待您的加入

iOS的viewDidUnload和dealloc有啥区别

0 投票

这两个方法里都要释放对象,那在哪里释放有什么区别呢?
如果我把所有的资源都放在dealloc里释放会出什么问题么?
都放在viewDidUnload里呢?

用户头像 提问 2012年 12月1日 @ Kennen 上等兵 (442 威望)
分享到:

1个回答

0 投票
 
最佳答案

这两个调用的场景是完全不一样的。
1)viewDidUnload只有在收到内存警告后,controller连着的主View被释放了才会调用。
2)而dealloc则是Controller释放的时候调用的,当然这个时候连着它的View也会被释放,但是这个时候是不会调用viewDidUnload的。

所以说,ViewDidUnload其实在一个contorller的生命周期中有可能被调用多次,也有可能一次都不调用。那么它里面应该释放的东西主要是要跟viewDidLoad对应起来。比如你在viewDidLoad中在给主view add了一个子view,那么如果你不在viewDidUnload中去remove这个子View,就会造成第二次viewDidLoad的时候又加了一个View上去。主要是特别要注意这类问题。

还要注意一点,如果是和数据、view的一些状态相关的东西,你不能在viewDidUnload中去释放它,这样会导致当View再次加载进来的时候就跟之前的不一样了。

对于具体的调试,你可以在模拟器中触发内存警告来触发viewDidUnload。不过要注意的是不能是当前最上面的controller。因为只有是没有显示在主屏幕上的view才有可能被释放。

有点啰嗦。想到什么写什么了。

用户头像 回复 2012年 12月1日 @ Kennen 上等兵 (442 威望)
提一个问题:

相关问题

0 投票
1 回复 42 阅读
0 投票
1 回复 27 阅读
用户头像 提问 2014年 1月30日 @ Viktor 上等兵 (290 威望)
+1 投票
1 回复 87 阅读
用户头像 提问 2013年 3月3日 @ hadoop 上等兵 (109 威望)
+2 投票
2 回复 94 阅读
用户头像 提问 2012年 12月1日 @ Shyvana 上等兵 (214 威望)
0 投票
1 回复 65 阅读
用户头像 提问 2012年 12月1日 @ Trundle 上等兵 (301 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...