我认为这可能只是归结为我没有完全理解当应用程序获得内存警告时应该做的正确事情(或者我不明白iOS发生内存警告时自己做了什么)。如何保存视图控制器由于内存警告而被卸载时的状态?
这里是我的问题的一个简化版本:
我有一个RootViewController
。它推动TextViewController
,我有一个UITextField
。 TextViewController
可以推送显示一些细节的DetailViewController
。
如果我一路推到DetailsViewController
,让我的导航视图控制器堆栈[RootVC, TextVC, DetailVC]
,然后模拟内存警告,TextVC
被从内存中自动卸载的iOS。
问题1: iOS只是决定我的视图控制器应该卸载。当用户弹出DetailVC
返回到TextVC
,我应该在哪里保存状态信息(例如在文本字段中输入的文本)?现在,文本字段只是回到空白,因为视图控制器已卸载然后重新加载。
问题2:当我突然回
TextVC
和挖掘文本字段,我的应用程序崩溃。打开僵尸透露,某些
UIView
从某处发现了一个
responderDidBecomeActive:
消息,当我点击文本字段。 ARC如何实现这个目标?在我的
viewDidUnload
方法中,我将文本字段设置为零,甚至将其委托属性设置为零。
编辑。
新问题:我只是通过覆盖
didReceiveMemoryWarning
为
TextVC
完全解决了所有问题,并且它没有做任何事情。从1到非常糟糕的规模,这有多糟糕?
EDIT 2 开玩笑,我是个白痴忘了删除一个通知的观察者在一个完全不同但相关的代码。我还是不明白在iOS抛出你的废话时应如何保存状态信息。
我还没有看过新的NDA东西,所以我很高兴听到他们正在解决这个问题。我有一个强大的NSString属性,我将其设置为文本字段的值,但是当我触发内存警告并且视图被卸载,然后尝试访问'viewDidLoad'中的属性时,它返回到nil。我错过了什么...? – 2012-08-17 15:51:20
没关系,一切工作都应该如此。现在听起来很愚蠢,但我在iOS开发的几年中并没有想到,* view *在这里被卸载,而不是* view controller *。 – 2012-08-17 16:14:30
我相信笔尖内的所有东西都会被卸载,但现在我正在质疑这一点!对于视图和视图中的任何内容!在几个月内,它的一切都将改变 - 为了更好! – 2012-08-17 18:28:33