【发布时间】:2011-03-23 00:04:23
【问题描述】:
所以我在 ipad 上安装了我的应用程序,但由于内存问题,它崩溃了。我想这是因为我使用了非常大的图像文件,所以我返回并缩小了它们,并通过调整它们的大小然后使用 PNGCrush 基本上削减了大约 75% 的大小。
现在,至于运行程序,如果我的 4 个单独选项卡中的每一个都有一个背景图像,如果我每次切换选项卡时都将图像设置为 Null 是否会节省内存,还是应该保留它们设置?我有一个页面,上面有几十个图像,因为它们充当按钮,从我听到的声音来看,当我不查看该页面时,我应该将它们全部清除。对吗?
现在,当我启动时,我会以一种“现在加载并完成它”的心态加载应用程序中所有内容的所有图像,尽管从我一直在阅读的内容来看,这会导致内存问题因为没有太多内存可以使用。这是否意味着每次我切换选项卡或视图时,我都想从不可见的图像中清除所有图像,然后在我们返回时重新加载它们?这会导致性能提升吗?或者至少可以防止崩溃?我的程序在模拟器中运行,但是当我在我的 ipad 上运行它时它就爆炸了 =/
谢谢!
编辑:我正在使用 Monotouch BTW,因此一切都在 C# 中
UIImage BG = UIImage.FromFile("Images/Makes/explosion.png");
UIImage basic = UIImage.FromFile("Images/Models/camaro.png");
UIImage advance = UIImage.FromFile("Images/search.png");
AdvancedSearchButton.SetBackgroundImage(advance, UIControlState.Normal);
ImageSearchButton.SetBackgroundImage(basic, UIControlState.Normal);
MainBG.Image = BG;
BG.Dispose();
basic.Dispose();
advance.Dispose();
现在我知道在常规 C# 中 dispose() 实际上并没有“释放”内存,但我读到一些内容说当它编译到 obj-c 时它会转换为 "release",这样基本上就是释放那些对象。
另外,我想知道在我不再查看它们之后是否需要dispose() 的各个按钮和图像。我只是将图像设置为 NULL,但这给了我错误。
MainBG.Dispose();
AdvancedSearchButton.Dispose();
ImageSearchButton.Dispose();
非常感谢您的帮助!
EDIT2:
所以我只是尝试了上面的代码,背景图像和其他所有内容都仍然存在,看起来好像什么都没有被清除。有什么建议吗?
【问题讨论】:
标签: ipad memory-management xamarin.ios ios-simulator