IOS内存和电池管理 - 内存与工作

时间:2012-08-10 13:01:49

标签: ios xcode

我是IOS的新手并且来自个人电脑我正在尝试管理内存和电池资源。

我有一个非常轻的UIImageView子类(它是一个带有少量方法的图像占位符)。此子类重复添加到多个根视图中,并从中删除。我在每个根视图上都有一个对子类的IBOutlet引用。

你愿意:

  • 只需在根视图中添加/删除子类(并将其保存在内存中)?

或者

  • 每次创建并销毁子类实例(释放内存但是额外的工作)?

这值得考虑还是我担心什么?

如果UIImageView子类非常大,你的答案是否相同?

有没有办法衡量这些事项?

4 个答案:

答案 0 :(得分:2)

通常,您可以在iOS上忽略UIImageViewUIImageView只是一个剪切区域,有一些处理图像的方法。

占用更多内存的资源是UIImage所包含的UIImageView,这些资源由iOS缓存。

因此创建UIImageViews并销毁它们的成本很低,只要注意你解除它们并且不要泄漏内存,除非你有数百个它们,否则你应该没事。

子类是“大”无关紧要,类中的代码永远不会被加载多次。如果这个类有很多额外的状态 - 这将占用一些记忆,但我不能在UIImageView中对其进行大量渲染。

答案 1 :(得分:1)

你最好把它留在记忆中。如果不通过不断重新创建图像视图来降低设备速度,用户体验会更好。一个可怜的UIImageView实例的内存不够重,不值得花费时间和精力来重新安排。

答案 2 :(得分:1)

保持记忆以提高性能并不像你想象的那么大 - 取自你的其他答案。但是如果你收到内存警告,你应该把它从内存中删除,并提供一种方法让它恢复生机。

答案 3 :(得分:0)

我会选择第一个选项,将其保存在内存中。这只是因为我认为保持我的观点存活并重用它们是很方便的。这意味着他们将记住他们的状态和内容,并且在许多情况下有所帮助。我通常会编写方法来重置内容或在需要时刷新内容。

将它保留在内存中也可能会稍微增加视图的加载量,但通常你没有注意到差异,我看到人们都使用这两种方式。

是的,我会说你有点担心,特别是如果你认为这个决定会影响电池的话。

关于内存管理,只要您只使用一个图像视图,将图像视图保留在内存中或释放/重新创建就会消耗完全相同的内存量。唯一的区别是,如果要重新创建它,则会重复分配和释放它。

如果您在每次用户打开时都开始创建新的图像视图并且永远不会放弃它们,则可能会出现内存问题,但这意味着您在编程中做了一些根本性的错误。

只要你知道自己在做什么,就不必担心像这样的情况下的内存量 - 有很多。如果您正在处理大图像,请开始担心。

特别是如果你使用ARC,没有太多担心,只是开始乱砍。如果您手动管理内存,我建议您尝试重复使用内容,因为这会减少头痛和巨大泄漏的风险。在这种情况下,请使用泄漏工具和分析工具来确保。