【问题标题】:Image memory issues in iphone retina displayiphone视网膜显示屏中的图像记忆问题
【发布时间】:2012-07-21 01:47:29
【问题描述】:

我正在为一家公司开发游戏。现在我们遇到了一个问题。 我们的游戏是为 iphone 和 ipad 制作的。我们有常规图像和@2x 图像。我们的游戏在 iphone 3gs 和所有 ipad 版本上运行良好。但是我们的游戏在 iphone 4 和 4s 上崩溃了。 是因为它的视网膜而崩溃吗?我知道所有图像都是4x。 我们现在想知道它会以何种方式崩溃。

谁能帮帮我?

编辑:

我们的游戏使用UIKitcocos2d并使用OpenGL

【问题讨论】:

  • 您是否看到任何错误消息?它在模拟器中崩溃了吗?请详细描述情况。
  • 它没有看到任何错误消息,它只是崩溃了。
  • 它不会在模拟器上崩溃
  • 这真的不足以让我们找到问题所在。尝试创建一个新项目,其中包含 1 个图像和 1 个图像视图。在所有相同的设备上进行测试,看看会发生什么。如果问题是可重现的,请在问题中编辑一些代码。如果不是,请考虑您可能会采取哪些其他措施来导致问题。
  • 设备控制台(在管理器中)是否显示任何内容?

标签: iphone objective-c ios memory-management retina-display


【解决方案1】:

所以这样做:在 Xcode 中取消选中所有 @2x 图像 - 所以 imageNamed 只会找到正常的图像。运行应用程序。它会崩溃吗?如果是这样,那么它不是图像。现在开始打开@2x 图像——一次打开几个。运行。它会崩溃吗?

如果您有大量用于视网膜 iPad 的 @2x 视网膜图像,是的,这可能是个问题。你没有说你正在使用多少张图片 - 如果有数百张,不要使用 imageName。我使用少量,iPad/iPhone 没有问题。

【讨论】:

  • 从项目设置的构建阶段窗格中执行此操作。按@2x 过滤并删除所有内容。
  • 正确的做法是一次一个地做,或者做一个脚本。脚本可能会花费您同样的时间,但您可以稍后重用它。
【解决方案2】:

如何将图像加载到图像视图中?如果你使用[UIImage imageNamed:@"blablabla.png"] - 那是邪恶的 - look here why。改用这个:

[UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/name_of_image.png", [[NSBundle mainBundle] resourcePath]]]. 

总是。

编辑:在加载视网膜大小的图像时,调整上述图像名称以包含 @2x。

【讨论】:

  • 大部分图片我们使用 cocos2d,所以我认为这不是问题
  • 那么,您在使用这些图像时做了多少分配?
  • 您是否在 Profiler 中测试过应用程序的内存泄漏?
  • 我们总是在使用完它们后发布。我们确实对其进行了分析,但播放 20 秒后它不应该崩溃
  • 如果你看到我给你的链接,你就知道释放一个使用“imageNamed”分配的图像对象,实际上并没有释放所有的内存。当您拥有大量图像时,您就会被“破解”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多