iphone - 我什么时候应该在 -(void)viewDidUnload 而不是 -dealloc 中释放对象?

标签 iphone objective-c ios cocoa-touch memory-management

-(void)viewDidUnload 有什么用处?

我不能只释放 -dealloc 中的所有内容吗?如果 View 确实卸载了,难道不会调用 -dealloc 吗?

最佳答案

除了已经说明的内容,我想详细说明-viewDidUnload 背后的逻辑。

实现它的最重要原因之一是 UIViewController 子类通常还包含对 View 层次结构中各种 subview 的拥有引用。例如,这些属性可以在从 nib 加载时通过 IBOutlets 设置,或者在 -loadView 内以编程方式设置。

UIViewController 对 subview 的附加所有权意味着即使将其 View 从 View 层次结构中移除并释放以节省内存,通过这 subview 也被 View 释放,它们不会实际上被释放是因为 UIViewController 本身仍然包含对这些对象的未完成保留引用。释放这些对象的 UIViewController 额外所有权可确保它们也将被释放以释放内存。

您在此处发布的对象通常会在 UIViewController View 被 重新加载 时重新创建并重新设置,无论是从 Nib 还是通过 的实现-loadView.

另请注意,在调用此方法时,UIViewController view 属性为 nil

关于iphone - 我什么时候应该在 -(void)viewDidUnload 而不是 -dealloc 中释放对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1158788/

相关文章:

objective-c - 如何不使用 dequeueReusableCellWithIdentifier?

ios - 如何将 og.likes 操作类型与产品对象类型一起使用?

ios - Flurry v 4.2.3 链接问题

c++ - 如何删除 "NSBundle may not respond to ' -pathForResource :ofType' "warning

iphone - 以编程方式在表格单元格中添加 UISegmentedControl 并具有清晰的背景

ios - 使用 UIViewControllerBasedStatusBarAppearance 时更改默认 UIStatusBarStyle

objective-c - NSURL baseURL 返回 nil。获取实际基本 URL 的任何其他方式

objective-c - Objective-C - UICollectionView 左侧/右侧的渐变渐变

ios - 从 CoreData 检索 NSDate 并将其设置为 Swift 中的 NSDate 变量

iphone - ".../libtool: can' t 找到 : -lxml2"的文件