这两个方法里都要释放对象,那在哪里释放有什么区别呢? 如果我把所有的资源都放在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才有可能被释放。
有点啰嗦。想到什么写什么了。
我觉得你可以换个角度来看,比如init和viewDidLoad,当你创建一个Controller的时候就会调用init,但是只有你把controller放到window上显示的时候才会调用viewDidLoad。
init
viewDidLoad
同样,当controller不再显示,并且内存不够的时候,系统可能会调用其viewDidUnload,这个时候对象并不会dealloc,只不过再次显示的时候会重新viewDidLoad一遍
viewDidUnload
dealloc
viewDidUnload 是UI中 view 被切换出去的回调函数. dealloc 是对象的应用数降为0时, 释放内存.
如果说 view 对象后面还会重用, 把资源释放写在 dealloc 里就可以了.
这两个调用的场景是完全不一样的。
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才有可能被释放。
有点啰嗦。想到什么写什么了。
我觉得你可以换个角度来看,比如
init
和viewDidLoad
,当你创建一个Controller的时候就会调用init
,但是只有你把controller放到window上显示的时候才会调用viewDidLoad
。同样,当controller不再显示,并且内存不够的时候,系统可能会调用其
viewDidUnload
,这个时候对象并不会dealloc
,只不过再次显示的时候会重新viewDidLoad
一遍viewDidUnload 是UI中 view 被切换出去的回调函数.
dealloc 是对象的应用数降为0时, 释放内存.
如果说 view 对象后面还会重用, 把资源释放写在 dealloc 里就可以了.