viewDidUnload和dealloc的理解

来源:互联网 发布:java web开发书籍推荐 编辑:程序博客网 时间:2024/05/21 07:25

1,viewDidUnload是当view被卸载以后执行的语句,与viewDidLoad相对。

self.myOutBlet = nil;

    它不能手动调用,是当应用程序接收到手机内存警告的时候执行的方法。目的是清空除当前viewController以外其他所有的已经加载过的viewController里面的暂时不在使用的一些控件或数据,避免应用程序消耗内存过多而被强制关闭。

   是除当前正在展示的view所属的viewController以外已经在内存里面的viewController执行viewDidUnload方法,而不是当前的viewController去执行,当然这些viewController不会被dealloc掉。。


  为什么要写成self.myOutBlet = nil?

它干了两件事:实际上是执行了property的setter方法。一是将老数据release掉,二是新数据nil retain(如果property设置属性为retain),对nil retain虽然没有意义。如果直接myOutBlet = nil;则会造成内存泄露,因为老数据没有release掉。如果写成[myOutBlet release];则当view被dealloc的时候也会被release掉,程序就出错了,而对nil release是没问题的。


2,dealloc是当前viewController被释放的时候,清空所有当前viewController里面的实体和数据来释放内存、自动调用,无需手动执行。

 比如当modleView被dismissModalViewControllerAnimated或者navigationController回到上一页的时候,这个方法会被自动调用。


3,两者区别:viewDidUnload是除当前以外内存里所有viewController同时执行,而dealloc是当前contrller执行。

原创粉丝点击