Cocoa touch dealloc和viewdidunload之间有什么区别?

Cocoa touch dealloc和viewdidunload之间有什么区别?,cocoa-touch,ios4,xcode4,viewdidload,Cocoa Touch,Ios4,Xcode4,Viewdidload,我应该什么时候释放程序中分配的所有内存 因为我只有一个viewDidLoad方法来处理我的业务。我是否应该在viewDidUnload中将dealloc保留为空并仅在viewDidUnload中进行清理?正如-viewDidUnload的文档所述: 它在内存不足时调用 查看控制器时的条件 需要发布其视图和任何 与该视图关联的对象 释放内存。因为观点 控制器通常存储对的引用 视图和其他与视图相关的对象, 您应该使用此方法 放弃对这些对象的所有权 这样他们的记忆就可以 回收。你应该只为你自己做这件事

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


因为我只有一个viewDidLoad方法来处理我的业务。我是否应该在viewDidUnload中将dealloc保留为空并仅在viewDidUnload中进行清理?

正如
-viewDidUnload
的文档所述:

它在内存不足时调用 查看控制器时的条件 需要发布其视图和任何 与该视图关联的对象 释放内存。因为观点 控制器通常存储对的引用 视图和其他与视图相关的对象, 您应该使用此方法 放弃对这些对象的所有权 这样他们的记忆就可以 回收。你应该只为你自己做这件事 可以轻松重新创建的对象 稍后,在viewDidLoad中 方法或从您的 应用你不应该用这个 方法来释放用户数据或任何 其他不能提供的信息 很容易重新创建

通常,视图控制器存储 对使用出口的对象的引用, 哪个变量或属性 包括IBOutlet关键字,并且是 使用界面生成器进行配置。A. 视图控制器还可以存储 指向它创建的对象的指针 以编程方式,例如在 viewDidLoad方法。首选方式 放弃对任何物体的所有权 (包括插座中的)将使用 相应的访问器方法 将对象的值设置为nil。 但是,如果您没有 给定对象的访问器方法, 您可能必须释放该对象 明确地说


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

当对象准备释放时(即,当对象的保留计数变为0时),使用“dealloc”。卸载视图时会调用viewDidUnload,但可能不会立即释放,因为UIViewController的引用仍由其他一些对象存储

我个人的偏好是,对于由“init”创建的OJBECT,它们由“dealloc”释放;对于由“viewDidLoad”创建的对象,它们由“viewDidUnload”释放。

与其说是一个“偏好”,不如说是一个必要条件。请记住,
-viewDidLoad
可能会被多次调用,尽管其间始终会有一个
-viewDidUnload
调用。但是,您在
-viewdiload
中创建的内容也应该在
-dealloc
中清理,因为在控制器解除分配之前可能不会调用
-viewdiload