2012-08-10 213 views
1

我是IOS新手,来自个人电脑我想尝试管理内存和电池资源。IOS内存和电池管理 - 内存vs工作

我有一个UIImageView的子类是非常轻的(这是一个图像占位符与一些方法)。此子类重复添加到几个根视图并从中移除。我在每个根视图上持有对子类的IBOutlet引用。

请问你:

  • 只需添加/删除从根视图的子类(并保持它在内存中)?

或者

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

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

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

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

+0

我会说保持实例,因为你反复使用它。如果您真的担心,可以随时在仪器中对您的应用进行配置以查找任何泄漏,并且如果它位于设备上,仍然可以使用仪器来测量电池消耗。 – CBredlow 2012-08-10 13:08:03

回答

0

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

将其保存在内存中也可能会稍微增加视图的加载,但通常您不会注意到这种差异,并且我看到有人使用这两种方法。

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

关于内存管理,只要您只使用一个imageview,就可以将imageview保存在内存中或释放/重新创建内存。唯一的区别是,如果您正在重新创建它,则会重复分配并释放它。

但是,如果您在用户每次打开它们时都开始创建新的图像浏览并且从不放开它们,但是这意味着您在编程中正在做一些根本性错误。

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

特别是如果您使用ARC,则无需担心,只需开始黑客入侵即可。如果你手动管理内存,我建议尝试重用,因为这会导致更少的头痛和巨大的泄漏风险。在这种情况下,使用leaktools和分析工具来确保。

2

一般而言,您可以在iOS上无视使用UIImageViewUIImageView并不仅仅是一个裁剪区域,其中有一些处理图像的方法。

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

因此,创建UIImageViews并销毁它们几乎没有成本,只要注意你将它们释放并且不会泄漏内存,除非你有数百个内存,否则你应该没问题。

“大”的子类并不重要,一个类中的代码永远不会加载多次。如果这个班有很多额外的状态 - 这将占用一些记忆,但我不能在UIImageView中形成一大堆。

1

你最好把它留在记忆里。如果您不通过不断重新创建图像视图来减慢设备速度,用户体验会更好。一个单一的可怜的UIImageView实例的内存不够大,无法花费时间和精力来进行所有时间恢复。

1

保持记忆力以提高性能并没有你想象的那么大 - 从其他答案中获得。但是,如果您收到内存警告,则应将其从内存中移除,并提供一种方法根据需要使其恢复正常。