根据 Apple 的说法,他们已经改进了视图的内部内存管理,足以使通过破坏其中的内容获得的收益viewWill/DidUnload
微乎其微。此外,他们有数据表明许多应用程序崩溃是因为应用程序没有正确处理这些通知,并且执行与视图卸载无关的“其他”事情。
最后,内存警告现在被验证为在您的应用程序因内存不足而终止之前您将收到的第一个也是唯一的警告,因此它确实是处理内存问题的地方。
所以,基本上,只需删除你的viewWillUnload
andviewDidUnload
方法。在适当的位置处理内存问题didReceiveMemoryWarning
和任何其他视图控制器管理。
编辑
请问:那些“合适的地方”是什么?我曾经在 view[Will/Did]Disappear 不完全足够的某些情况下使用 ViewdidUnload。就像在导航控制器堆栈上走得更远。您介意进一步详细说明吗?– Dan1one
那要看。我知道这不是你想听到的,但这是事实:-)
一般来说,你应该避免不对称。因此,您应该使用您“执行”原始操作的对称方法“撤消”操作。一般来说,你应该能够完成所有viewDidUnload
类型的工作didReceiveMemoryWarning
和dealloc
。
这实际上不应该引起更改,因为无论如何您都必须在这两个地方复制大部分代码。
我不知道您所说的“在导航控制器堆栈上走得更远”是什么意思,因此您需要澄清该示例,以便我提供有用的响应。
使用viewDidDisappear
and的问题之一viewDidAppear
是很难知道视图何时出现,因为它实际上正在出现,或者因为它上面的视图正在消失......导致它出现。
这些 API 应该可以帮助您解决这些问题:
- (BOOL)isMovingFromParentViewController
- (BOOL)isMovingToParentViewController
- (BOOL)isBeingDismissed
- (BOOL)isBeingPresented