首页 > 开发 > iOS > 正文

iOS的viewDidUnload和dealloc有啥区别

2017-09-08 14:04:02  来源:网友分享

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

解决方案

这两个调用的场景是完全不一样的。
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才有可能被释放。

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