【问题标题】:How to increase memory limit ios5如何增加内存限制ios5
【发布时间】:2012-03-08 11:33:03
【问题描述】:

在我的应用程序中,我尝试创建 [NSData initWithContentsOfFile]。在 ios4(ipod gen 3) 中创建的 nsdata 没有错误。但是在 ios5(ipod gen 4) 应用程序崩溃了。我认为 ipod 4 有 512mb 的 RAM,而 ipod 3 是 256mb,所以为什么不能创建数据。

【问题讨论】:

  • 您查看过崩溃日志吗?
  • 你的意思是当你有双内存时它崩溃了?
  • Daniel:大小约为 70mb。但这是我的测试用例。因为应用程序在 ios5 上运行并收到内存警告然后崩溃。所以我想通过加载文件来测试限制内存。
  • mbh:是的!我使用工具来查看内存分配。我的应用程序运行大约 30mb。有时,当进程操作内存增加到 ~70mb.And 与 ios5 崩溃:(
  • 听起来你可能有内存泄漏。

标签: iphone xcode memory


【解决方案1】:

仅仅因为设备具有更多 RAM 并不意味着您会自动在您的应用中获得更多可用 RAM。 iOS 尽可能有效地使用内存,它可能在您的 iOS 5 设备上崩溃的原因有很多,例如 iOS 5 可能比 iOS 4 使用更多的 RAM。接下来,您是否有相同数量的打开/后台应用程序在两个设备上运行?您还可以使用 Instruments 告诉您的应用程序有多少内存可用/可用。请留意。如果内存不足,唯一的解决方案是使用更少的内存。

【讨论】:

  • Ipod3 在后台运行的应用程序比 Ipod4 多。我的应用程序加载大小为 3k * 2k 的图像。所以可用的内存是~30mb。当处理诸如保存到相册之类的操作时,内存增加到〜70mb,收到内存警告并崩溃。
  • 是的。 ~70mb 肯定要求崩溃 - 在任一设备上。猜猜你在 iPod 3 上更幸运。
  • :D。可能是! stackoverflow.com/questions/6044147/…。无论如何,我让我的应用程序避免大量数据输入。谢谢!
  • 是的,确切地说,该答案指出“当您使用超过 20mb 的内存时,Apple 您的应用程序可能会因内存使用而被关闭”。所以你可能会逃脱更多 - 但不能保证。而且我的 iPad 2 上从来没有使用过 180mb。
  • 绝对!但我想在两个设备 ipod3 和 ipod4 之间进行比较。因为 ipod4 获得双倍 RAM 内存并且无法运行我的应用程序:D.
【解决方案2】:

这是一个限制因素——你想要的资源与系统的设计不匹配。

看看你是否可以mmap 代替文件。 man mmap

NSData 还支持使用自定义读取选项映射文件,请参阅+[NSData dataWithContentsOfFile:options:error:]

【讨论】:

  • 对不起。不清楚man map。但我用 fread 读取图像数据(3k x 2k)。太大但 ipod3 运行没有错误。我以我所知道的最好的方式拥有管理记忆。 Create NSData 是我测试限制内存的测试用例。
  • 啊。我知道 NSData 支持映射文件。但是您是否将映射文件与 [NSData getBytes] 一起使用?我认为这会导致内存泄漏。无论如何,我创建了一个对象 MyData 并使用 fread 逐页读取数据。谢谢!
  • 我不认为它会泄漏......
猜你喜欢
  • 1970-01-01
  • 2022-01-03
  • 2019-02-19
  • 2019-03-13
  • 2023-03-09
  • 2014-04-24
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多