我认为这可能归结为我没有完全理解当应用程序收到内存警告时应该做的正确事情(或者当你收到内存警告时,我可能不明白 iOS 自己会做什么)。
这是我的问题的简化版本:
我有一个RootViewController
. 它推动了TextViewController
我有一个UITextField
. TextViewController
可以推送一个DetailViewController
显示一些细节的。
如果我一直推到DetailsViewController
,那么我的导航视图控制器堆栈是[RootVC, TextVC, DetailVC]
,然后模拟内存警告,TextVC
iOS 会自动从内存中卸载。
问题 1: iOS 刚刚决定应该卸载我的视图控制器。当用户弹出DetailVC
返回时TextVC
,我应该在哪里保存状态信息(例如在文本字段中输入的文本)?现在,文本字段只是回到空白,因为视图控制器被卸载然后重新加载。
问题 2:当我弹回TextVC
并点击文本字段时,我的应用程序崩溃了。打开僵尸显示当我点击文本字段时,有些UIView
人正在从某个地方收到消息。responderDidBecomeActive:
ARC怎么可能做到这一点?在我的viewDidUnload
方法中,我将文本字段设置为 nil,甚至将其委托属性设置为 nil。
编辑。新问题:我只是通过覆盖didReceiveMemoryWarning
forTextVC
并让它不做任何事情来完全解决所有问题。从 1 到非常糟糕,这有多糟糕?
编辑 2.开个玩笑,我是个白痴,忘记在完全不同但相关的一段代码中删除通知的观察者。我仍然不明白当 iOS 扔掉你的废话时应该如何/在哪里保存状态信息。