我是不是必须保留放入 UIKit 应用程序视图中的所有值的副本?

Posted

技术标签:

【中文标题】我是不是必须保留放入 UIKit 应用程序视图中的所有值的副本?【英文标题】:Do I have to keep a copy of all values put into views in my UIKit app?我是否必须保留放入 UIKit 应用程序视图中的所有值的副本? 【发布时间】:2011-05-20 23:52:54 【问题描述】:

我有一个视图控制器,其中包含从 NIB 加载的视图。据我了解,控制器可以随时从内存中卸载视图。例如,假设我的应用进入后台。

如果我有值,例如文本字段中的文本,则在卸载视图时这些值将丢失。或者我可能想在加载视图之前设置这些值,在这种情况下我的出口没有设置,我还不能这样做。

因此,我是否需要在我的用户界面中保留所有值的卷影副本,以便我可以在 viewDidLoad 中重新设置它们:如果视图被卸载然后再次加载?

还是我做错了?

【问题讨论】:

【参考方案1】:

如果应用程序进入后台,请实现保存和恢复应用程序的方法。 UIApplication 将在以下 UIApplicationDelegate 方法中通知您何时焦点将发生变化:

– applicationDidBecomeActive:
– applicationWillResignActive:
– applicationDidEnterBackground:
– applicationWillEnterForeground:

有关详细信息,请参阅帮助。

忘记了内存警告... 解决方案取决于具体情况。根据我的经验,当您的可见视图被移除以清除一些内存时,您不想实现恢复机制,而是测试内存泄漏、观察内存分配、优化内存管理或重新考虑设计。

【讨论】:

好的,但这只能解决视图被卸载的一个特定原因。视图被卸载的所有其他原因呢?包括那些可能没有记录的。我不认为 UIViewController 对何时卸载视图做出任何保证。 好吧,UIViewController 视图完全由 UIViewController 管理。查看适用于 ios 的 View Controller Programming Guide 以获得清晰的图像。我的建议是:别担心。即使您遇到这些情况,您也会倾向于优化内存使用,而不是担心恢复。 UIVIewController 为你做了很多非常棘手的工作,所以确保你正确地完成了另一部分。视图可能被卸载的唯一另一个原因是您通过从导航控制器弹出视图控制器来破坏它,例如,您下次推送它时需要新的 VC 实例。不要保留引用。 一般规则是,如果您让 UIViewController 管理您的视图,那么,让他管理它。完成视图后,销毁 UIViewController 或从超级视图中删除视图。如果您想要自定义视图控制器,请查看此文档:developer.apple.com/library/ios/#featuredarticles/…

以上是关于我是不是必须保留放入 UIKit 应用程序视图中的所有值的副本?的主要内容,如果未能解决你的问题,请参考以下文章

无法查看 UITableViewCell 中的自定义标签

UIKit 中的大弹出视图叫啥?

值更改时如何在 UIKit 中更新 SwiftUI 视图?

如何知道 UIKit 视图控制器中的 swiftUI 事件? ||如何提供 swiftUI 和 uikit 之间的通信

UIKit Dynamics 用碰撞改变视图框架

sql中的键是不是仍会保留在视图中