gpt4 book ai didi

objective-c - 由于内存警告而卸载 View Controller 时如何保留状态?

转载 作者:行者123 更新时间:2023-11-28 22:51:04 25 4
gpt4 key购买 nike

我认为这可能归结为我没有完全理解当应用程序收到内存警告时应该做的正确事情(或者我不明白当你收到内存警告时 iOS 自己做了什么)。

这是我的问题的简化版本:

我有一个 RootViewController .它推送 TextViewController我有一个 UITextField . TextViewController可以推送DetailViewController显示了一些细节。

如果我一直推到 DetailsViewController ,所以我的导航 View Controller 堆栈是 [RootVC, TextVC, DetailVC] ,然后模拟一个内存警告,TextVC由 iOS 自动从内存中卸载。

问题 1:iOS 刚刚决定应该卸载我的 View Controller 。当用户弹出 DetailVC回到TextVC ,我应该在哪里保存状态信息(例如在文本字段中输入的文本)?现在,文本字段刚刚变回空白,因为 View Controller 被卸载然后重新加载。

<罢工>问题 2: 当我跳回 TextVC 时并点击文本字段,我的应用程序崩溃了。打开僵尸显示一些UIView得到一个 responderDidBecomeActive:当我点击文本字段时来自某处的消息。使用 ARC,这怎么可能呢?在我的 viewDidUnload方法我将文本字段设置为 nil,甚至将其委托(delegate)属性设置为 nil。

<罢工>编辑。 新问题:我刚刚通过重写 didReceiveMemoryWarning 完全修复了所有问题对于 TextVC让它什么都不做。从 1 到非常糟糕,这有多糟糕?

编辑 2. 开个玩笑,我是个白痴,忘了在一段完全不同但相关的代码中删除一个通知观察者。我仍然不明白当 iOS 扔掉你的废话时,状态信息应该如何保存/保存在哪里。

最佳答案

思考方式如下。当您获得 viewDidUnload 时,系统已清除所有 UI 元素。当你弹回你的 View 时,系统将重新加载 Nib ,你将再次获得 viewDidLoad,显然所有数据和设置都将丢失。

这个问题的解决方案是在任何可能被卸载的 viewConroller 中,您将保存用户在 ivars 中输入或设置的任何数据 - 例如,您将文本保存在 NSString 中。在 viewDidLoad 中,您可以查看该字符串,如果其中有数据,则初始化文本字段。

我告诉你的所有内容都与 ios5 相关。 Apple 将来会改变它在这方面的做法,但我不能在这里真正谈论它,因为我在 WWDC 上了解到的内容处于保密状态。也就是说,您可能可以通过查看一些 WWDC 视频或阅读私有(private)开发人员列表很快找到它。你应该对你将学到的东西感到非常高兴!

关于objective-c - 由于内存警告而卸载 View Controller 时如何保留状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12004379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com