【发布时间】:2011-07-01 11:54:56
【问题描述】:
我浏览了很多帖子、我的书籍和 Apple Developer,并收集了我在使用这些方面需要的大部分理解。如果有好心人能确认我做对(或纠正我)并回答这两个问题,我将不胜感激。
非常感谢,
克里斯。
消息顺序 通常,消息将按以下顺序出现:
didReceiveMemoryWarning
viewDidUnload(可能由 1 引起)——显然只适用于 View Controller 类。
dealloc
didReceiveMemoryWarning
当系统内存不足时调用。
默认情况下,视图控制器注册了内存警告通知,并且在模板方法中,如果没有超级视图,调用 [super didReceiveMemoryWarning] 会释放视图,这是一种检查视图是否可见的方法或不。它通过将其属性设置为 nil 来释放视图。
Action - 释放你不需要的任何东西,可能会撤销你在 viewDidLoad 中设置的东西。不要释放 UI 元素,因为这些应该由 viewDidUnload 释放。
问题 1 - 即使视图可见,它似乎也会被调用,因此很难看到您可以安全释放的内容。了解这一点以及可以发布的一些示例将非常有帮助。
viewDidUnload
当不可见的 View Controller 的 View 属性设置为 nil 时调用,手动或最常见的是通过 didReceiveMemoryWarning。
viewDidUnload 方法在那里,您可以: - 清理你想要的任何东西,以节省额外的内存或 - 如果您保留了一些 IBOutlets,以帮助释放在卸载视图时不会释放的内存。
Action - 通常你在 dealloc 中释放的任何 IBOutlets,也应该在这个方法中被释放(并且引用设置为 nil)。请注意,如果属性设置为保留,则将它们设置为 nil 也会释放它们。
dealloc
在释放视图控制器对象时调用,当保留计数降至零时调用。
Action - 释放所有已被该类保留的对象,包括但不限于所有具有保留或复制的属性。
弹出视图控制器和内存
问题 2 - 弹出视图是否会将其从内存中删除?
【问题讨论】:
-
关于问题2:你的意思是从导航控制器中释放视图还是弹出视图控制器?
-
@Robin 0 弹出视图控制器。
标签: iphone memory-management uiviewcontroller