收到内存警告的未知原因

Posted

技术标签:

【中文标题】收到内存警告的未知原因【英文标题】:Unknown reason to receive Memory Warning 【发布时间】:2013-03-21 12:48:20 【问题描述】:

让我来快速发布。到目前为止,我的代码没有问题。我唯一关心的是内存管理。让我把我的应用逻辑说清楚。

    当应用程序全局启动时,NSmutableDictionary 被声明,近 300 张图像被添加到具有各种键的字典中,并使用 pathForResource:ofType 方法添加图像。

    在我的 rootViewController 加载后,我的 35 个自定义 UIView 被添加到具有另一个键的同一个全局字典中。(这个 rootViewController 不会经常使用)

    我有 4 个 ViewController,我将在其中将这些 UIView 和图像用于全局字典中的所有 ViewController。

    当移动到另一个 viewController 时,我释放视图并使其为零。

    我的问题是当我在 ViewController 之间快速移动时 (1 --> 2 --> 3 --> 4 -->1)。如果我这样做 4 到 6 次,它就会崩溃。

    如果我移动缓慢,它会在 10 到 15 次后崩溃。

我不知道它崩溃的原因,即使我的 Live 字节最大为 5 MB。我从控制台和设备日志中得到的只是接收到的内存警告。使用 Instruments 时无泄漏,无 Dirty size 或 resident size。

在模拟器中运行时,我只在多台设备上遇到此问题,但我遇到了此问题。

我有以下疑问

在全局字典中添加所有内容是否好。我的想法是减少每个 ViewControllers 的加载时间

为了重用相同的图像,我们可以使用 pathForResource 或图像命名方法..

提前致谢...

【问题讨论】:

不要使用 imageNamed 方法,而是使用 imageWithContentsOfFile: 方法。 ImageNamed 将杀死您的应用程序,您将在白天寻找星星.. :-/ 我希望您在设备上缓存图像(缓存或其他目录)。 【参考方案1】:

所以你的问题:

收到内存警告的未知原因

第一个原因:

当应用程序全局启动时,NSmutableDictionary 被声明并 将近 300 张图像添加到该字典中,其中包含各种键,并且使用 pathForResource:ofType 方法添加图像。

第二个原因:

在我的 rootViewController 加载后,我的 35 个自定义 UIView 被添加到 具有另一个键的相同全局字典。(此 rootViewController 不会经常使用)

其他问题:

在全局字典中添加所有内容是否好。我的想法是 减少每个 ViewController 的加载时间

不,不是……Lazy Initialization?

为了重用相同的图像,我们可以使用 pathForResource 或 image named 方法..

你可以使用任何你想要的东西,只要你真正需要它时使用它。

【讨论】:

以上是关于收到内存警告的未知原因的主要内容,如果未能解决你的问题,请参考以下文章

收到内存警告?

Xcode 因未知原因给出版本兼容性警告

使用仪器收到内存警告

收到内存警告时 UICollectionView 维护的单元队列会发生啥?

从 iphone 相机拍照时收到 iphone 中的内存警告问题

收到内存警告然后崩溃