dealloc和viewdidunload有什么区别?

时间:2011-06-22 05:00:48

标签: cocoa-touch ios4 xcode4 viewdidload

我什么时候应该释放我在程序中分配的所有内存?

因为我只有一个viewDidLoad方法来处理我的业务。我应该只在viewDidUnload吗?

中将dealloc留空并清理

2 个答案:

答案 0 :(得分:8)

当对象准备好被释放时(即,当对象的保留计数变为0时),使用

'dealloc'。并且在卸载视图时会调用viewDidUnload,但可能不会立即释放它,因为UIViewController的引用仍然由其他一些对象存储。

我个人的偏好是,对于'init'创建的ojbects,它们被'dealloc'释放,对于'viewDidLoad'创建的对象,它们被'viewDidUnload'释放。

答案 1 :(得分:4)

正如-viewDidUnload的文档所说:

  

在低内存期间调用它   视图控制器的条件   需要释放它的观点和任何   与该视图关联的对象   释放记忆。因为看法   控制器经常存储引用   视图和其他与视图相关的对象,   你应该使用这种方法   放弃这些物品的所有权   这样他们的记忆就可以了   回收。你应该只为此而这样做   您可以轻松重新创建的对象   之后,在viewDidLoad中   方法或来自你的其他部分   应用。你不应该使用它   释放用户数据的方法或任何方法   其他不可能的信息   很容易重建。

     

通常,视图控制器存储   使用插座引用对象,   这是一个变量或属性   包括IBOutlet关键字和   使用Interface Builder配置。一个   视图控制器也可以存储   指向它创建的对象的指针   以编程方式,例如在   viewDidLoad方法。首选方式   放弃任何对象的所有权   (包括在商店中的那些)是使用   相应的访问器方法   将对象的值设置为nil。   但是,如果你没有   给定对象的访问器方法,   您可能必须释放该对象   明确。

-viewDidUnload中没有提及-dealloc,您不应该依赖它。