iphone - 模态视图 Controller 因内存警告而被解雇?

标签 iphone ios memory-management didreceivememorywarning

我的应用程序中发生了一个间歇性错误,我终于能够通过模拟特定场景中的内存警告来一致地重现它。这是设置。

 Nav controller
 (as tab inside      --> Modal Controller 1 --> Modal Controller 2
 Tab Controller)

如果我在屏幕上显示模态 Controller 2 时模拟内存警告,则模态 Controller 1 将被关闭,并且底部导航 Controller 会一直弹出到其根目录。这正是所报告的错误中发生的情况。

如果用户随后按下 MC2 中的“完成”按钮,则会调用 MC1 中的委托(delegate)方法,该方法会崩溃,因为内存警告导致 MC1 被卸载并释放。

在我的应用程序中的其他地方,我有导航 Controller 呈现模态视图 Controller 链,但触发内存警告只会在我的应用程序的一个特定区域中导致此问题。

有什么可能导致此行为吗?我没有具体的代码示例,因为我不确定是什么代码导致了问题。如果有任何指点,我将不胜感激。

最佳答案

当发生内存警告时,iOS 可能会释放任何不可见的 View ,包括您的情况下的 MC1 View (但不是 MC1 本身)。您需要在 MC1 中实现以下内容。

  • 在 viewDidUnload 中或显示 MC2 之前,记住当前状态。
  • 在 viewDidLoad 中,恢复旧状态(如果有)。
  • 在委托(delegate)方法中,调用[self view]来加载已释放的 View 。

或者,您可能需要考虑以下技巧。 UIViewController prevent view from unloading

关于iphone - 模态视图 Controller 因内存警告而被解雇?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9121154/

相关文章:

IOS/objective-C : Change tint of an image view

.net - 如何减少 WPF 应用程序的内存使用量

java - 如何在不创建新日期的情况下在 Java 中获取系统时间

iphone - 如何禁用 View 的可访问性,包括它的所有 subview ?

iphone - 如何在 itunes 中查看设备上已安装的配置证书

IOS:从 uitableviewcell 验证用户发送重定向到相应的 Controller ?

ios - 如何在 UICollectionView 和 UIView 之间创建空白?

ios - 自定义 UITextInput 实现不显示多阶段输入建议

ios - 如何构建仍然兼容存档并上传到 AppStore 的 Framework fat 二进制文件(所有 archs)?

Delphi FreeAndNil : Looking for an alternate implementation