我看到我的应用程序被iOS内存消息杀死,然而,在分配工具中跟踪应用程序的进度时,我看到很多malloc似乎发生在代码之外我写了。
我没有看到任何泄漏,所以我认为这些分配应该在那里。事情是,因为我不确定他们为什么被分配,我不知道我能做些什么来优化应用程序并阻止操作系统放弃我的应用程序。
有谁知道为什么要分配内存,或者有什么办法让我找到?
以下是来自乐器的几张照片,展示了mallocs。在第二个镜头中,所有分配都具有相同的堆栈跟踪。
修改
我'显示单个大图像作为UIView背景(1024x768),然后将一个较小的(600px正方形)UIView与一些自定义绘图和第三个UIView(550px正方形)覆盖在包含两个550px正方形图像的顶部覆盖。
我猜这不合适,并且可能有更好的方法来实现应用程序工作所需的视图组合。
这可以在iPad上使用吗?
答案 0 :(得分:1)
我认为这里没有太多的信息 - 如果你添加更多关于你的应用中这个视图的信息,你可能会得到一些更明智的建议。
从屏幕截图中可以看出,正在分配大块以显示图像。
鉴于我猜测你要么试图显示一些非常大的图像,要么UIView很大,或者你在内存中有更多UIViews需要显示当前屏幕。
我想最简单的方法是找出他们来自哪里的确切方法是禁用您怀疑然后再次运行的应用程序部分并查看分配是否仍然发生。
修改强>
所有图像的大小与显示的大小相同吗? (即你试图将5M照片显示为1024x768背景吗?)如果不是,你可能需要将它们缩小到你显示它们的尺寸,或者至少更接近。
如果您不需要透明度,请确保使所有视图都不透明。
答案 1 :(得分:1)
我找出了问题的根源 - 我正在使用
[UIImage imageNamed:@'Someimage']
加载我的图片。正如我相信很多人都知道的那样,这会缓存图像数据。我有足够大小的图像,可以让我的应用程序被抛弃。
问题显而易见,不是因为图像的大小,而是因为我使用的图像的大小和数量。这里的教训是be careful with [UIImage imageNamed:]。
感谢所有帮助,chaps!
答案 2 :(得分:0)
Mallocs可以出现在您的应用程序调用的其他API内部(例如加载图像,视图,播放长音等)。您可以尝试以不同的数量更改图像,视图,声音和其他对象的大小。测试,并查看malloc内存的大小是否更改跟踪您所做的更改之一。