我查看了许多帖子,我的书籍和Apple Developer,并从中获取了大部分所需的理解。如果有善良的人可以确认我是否正确(或更正我),并回答这两个问题,我将不胜感激。
非常感谢,
Chris。
消息顺序 一般而言,消息会按以下顺序出现:
didReceiveMemoryWarning
viewDidUnload (可能由1引起) - 显然仅适用于视图控制器类。
dealloc
didReceiveMemoryWarning
当系统内存不足时调用。
默认情况下,视图控制器已注册内存警告通知,在模板方法中,调用[super didReceiveMemoryWarning]如果视图没有超级视图,则释放视图,这是一种检查视图是否可见的方法。通过将其属性设置为nil来释放该视图。
动作-释放不需要的任何内容,很可能是撤消在viewDidLoad中设置的内容。不要释放UI元素,因为这些应该由viewDidUnload释放。
问题1-即使视图可见也会调用此方法,因此很难确定您可以安全地释放什么。了解这一点以及一些可以释放什么的示例将非常有帮助。
viewDidUnload
每当非可见视图控制器的View属性手动或通常通过didReceiveMemoryWarning设置为nil时都会调用它。
viewDidUnload方法存在的目的是,您可以:
-清理任何其他内容,以节省额外的内存 -如果您保留了一些IBOutlets,则可以帮助释放否则不会被视图卸载释放的内存。动作-通常,dealloc中释放的任何IBOutlets也应在此方法中释放(并将引用设置为nil)。请注意,如果属性设置为retain,则将其设置为nil也会释放它们。
dealloc
当视图控制器对象被释放时调用,这将在保留计数降至零时发生。
操作 - 释放类已保留的所有对象,包括但不限于所有具有保留或复制属性的对象。
弹出视图控制器和内存
问题2 - 弹出视图会将其从内存中删除吗?