iphone - iOS 如何决定向哪些对象发送 didReceiveMemoryWarning 消息?

标签 iphone objective-c ios cocoa-touch

我正在开发一个 iPhone 应用程序,其中许多 UIView 动态添加到主 UIWindow 和从主 UIWindow 中删除。

在模拟器中模拟低内存错误时,我发现并不是所有的 View Controller 都会收到 didReceiveMemoryWarning 通知。不幸的是,这些 Controller 将从实现此方法中获益最多。

我似乎无法找到有关调用方法的位置和方式的有用信息。我读过提到它被发送到“所有 UIViewControllers”,但显然情况并非如此。在确实收到通知的其中一个类中添加断点也不是特别有启发性。

这是一个复杂的项目,但添加这些 View 的一种方式是:

- (void) showMyView
{
  if(!myViewController){
    myViewController = [[MyViewController alloc]init];
    [window addSubview:myViewController.view];
  }
}

MyViewController 是另一个类 MySuperViewController 的子类,MySuperViewController 本身是 UIViewController 的子类。这些类都没有对应的 NIB; View 层次结构以编程方式创建。

我正在寻找有关如何诊断问题的指示。

最佳答案

当您直接使用 View Controller 的 .view 时,您的 View Controller 很可能不会收到很多通知,因为这不是使用 View Controller 的正确方法。 UIWindow 是一种特殊情况,因为窗口可以自动知道 View 的 Controller 并将消息正确地定向到 Controller 。

但是,当您从 UIWindow 中分离 View 时, View Controller 也会分离并且不再由 UIWindow 管理。我认为这是问题的根源。

我建议您添加一个导航 Controller 或标签栏 Controller 作为您的 Root View Controller ,并使用该 View Controller 功能在您的子 Controller 之间切换。请注意,切换时不应删除 View Controller ,以便它们能够适本地接收消息。

如果您的 View Controller 的初始化是微不足道的并且不会消耗太多时间,您也可以考虑在不使用时释放您的 View Controller 。

关于iphone - iOS 如何决定向哪些对象发送 didReceiveMemoryWarning 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6395083/

相关文章:

ios - 什么是通过 UIImage Picker 上传的 UIImageView 图像的 @"name"

ios - 解析失败

ios - 在react-native中下载ZIP文件

iphone - HFP 配置文件与 linux 和 iphone 5

iphone - 如何在按下按钮时停止声音

iphone - 如何在iPhone上动态创建sqlite3数据库?

ios - 减少启动图像时间 IOS

ios - Objective-C(将单个图像上传到服务器)

iphone - 大量使用 NSLog 会产生成本吗?

ios - iPhone 通过电话播放声音