也有人会告诉我viewDidUnload和dealloc之间的区别是什么?
答案 0 :(得分:1)
viewDidUnload:被调用。 More
dealloc:释放接收方占用的内存,通过发布NSObject协议方法间接调用对象的dealloc方法。 More
答案 1 :(得分:0)
是的,如果发生内存警告,可以卸载它。
至于viewDidUnload和dealloc之间的区别 - 在卸载视图时调用前者,通常是因为内存不足。当对象的保留计数达到零(即它完全从内存中释放)时调用后者
答案 2 :(得分:0)
UIViewController
。他们拥有的UIView
可以是。
所以,如果你质疑是否可以卸载UIView,尽管它的控制器已被推送到导航控制器,答案是肯定的。只有当前显示的UIView不会被卸载(如果你不阻止卸载机制工作)。
此外,viewDidUnload
是在其管理的视图已卸载时发送到UIViewController的消息,这通常与取消分配视图不同。实际上,当视图实际被释放时,它肯定会被卸载,但不会发送viewDidUnload
。
答案 3 :(得分:0)
已被推送到导航控制器堆栈但尚未弹出的UIViewController将不会被释放。但是,它的view
属性可能会被卸载 - 特别是,如果出现内存不足的情况并且该视图控制器的视图当前不可见(某些内容覆盖它,如模式对话框或其他VC推送在它之上),视图可以由系统卸载。
viewDidUnload
是该方法的错误名称。当低内存条件导致视图被卸载时调用它 - 即它不是viewDidLoad
的'相反'方法,我认为你可能会合理地预期。
更多信息:
When should I release objects in -(void)viewDidUnload rather than in -dealloc?
答案 4 :(得分:0)
同样重要的是viewDidLoad
之后会再次调用viewDidUnload
。如果在viewDidLoad
中执行设置,则应该以这样的方式处理它,即第二次调用它不会导致内存泄漏。
要么在viewDidUnload
中撕下所有内容(礼貌,如果它们是内存密集的话),或者在设置它们时检查它们是否存在并且不要进行两次。 (当然,在dealloc
方法之前或期间完全撕掉它们。)
保证在viewDidUnload
之前调用dealloc