【问题标题】:Monotouch app uses more memory on iPad?Monotouch 应用程序在 iPad 上使用更多内存?
【发布时间】:2011-07-14 04:04:17
【问题描述】:

我有一个基于 iPhone Windows 的 Monotouch 应用程序,与 iPhone 和 iPhone 模拟器相比,它在 iPad 上运行似乎需要更多内存。

在 Instruments 中监控内存分配后,我注意到有两个仅在 iPad 上实例化的附加实例(见下面的屏幕截图。)对 iPhone 和模拟器执行相同的步骤时,它们不存在。他们是一些总大小约为 4MB 的大热门。这两个实例的负责库是“CoreGraphics”。当它们被实例化时,我能够追踪到我被留在黑暗中,因为它就在 ViewDidLoad 完成之后。在 ViewDidLoad 中最后一行的断点和所有内容都显示在屏幕上之间,bam!正在使用 4 个额外的 mb。 XIB 是空的,因为我在代码中手动添加了所有内容,所以我无法弄清楚 ViewDidLoad 之后会发生什么。

我想深入了解这一点,因为该应用程序已经在推动内存限制。这是在 iPhone 上正常工作和在 iPad 上快速崩溃(与内存相关)之间的区别。因此,在不讨论应用程序的任何细节的情况下,是什么导致 iPad 实例化这些额外的 CoreGraphics 相关怪物而不是在 iPhone 上还是模拟器?

【问题讨论】:

  • 你试过比较 iPhone 和 iPhone 4 的视网膜显示屏吗?我的猜测是 CoreGraphics 只需要在内存中为你的 UI 保留更大的位图,因为屏幕更大。
  • 我同意。 CoreGraphics 是包含图形上下文的框架。更大的屏幕,更多的内存用于图形上下文。
  • 我目前还不是视网膜或 iPad 专家,但我不确定情况是否如此。由于它是一个 iPhone 应用程序,当它加载到 iPad 中时,它会与 iPhone 显示屏按比例显示。只有在按下“2x”按钮后它才会填满整个屏幕,即使这样也只是缩放的一种技巧。因此,在这方面,iPad 上使用的资源并没有比 iPhone 更多或更少。我认为。
  • 好吧,情节越来越复杂,现在事情变得更奇怪了。我偶然发现,当通过 PresentModalViewController 呈现 MFMailComposeViewController 时,将其分解,然后再次呈现它会清除神秘的 4mb 分配!会及时通知您。

标签: ipad xamarin.ios


【解决方案1】:

结果证明这是我的菜鸟错误。

我所有的图像都是视网膜(双倍尺寸),但命名与普通图像一样,myimage.png。我猜我的 iPad 不支持 Retina 图形,并且在尝试将所有 Retina 图形重新调整为正常大小时可能会不知所措。

我编写了一个脚本,将我的所有图形重命名为 myimage@2x.png,然后返回并将我的所有图形剪切为正常大小,并使用正常名称 myimage.png。在那之后,iPad 是一个快乐的露营者,而大型分配也无处可寻!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多