iPhone性能优化最佳实践

时间:2010-03-01 15:54:34

标签: iphone performance memory

我正在寻找一本关于iPhone优化的书籍,文字,帖子或其他内容,但除了Apple文档之外我找不到任何东西。

我认为讨论在优化应用性能时您采取的常见步骤会很棒。我现在正在努力提高我的应用程序内存使用率,而且我发现当你的应用程序很复杂时,这真的很难。

您如何处理视图创建和销毁?你是自己做的还是委托iPhone导航控制器?

您是否使用任何技巧来释放应用中的某些内存?

2 个答案:

答案 0 :(得分:7)

要优化内存使用量,请避免使用自动释放的对象。 如果您不再需要对象,请明确释放它,以便立即回收内存。 否则,该对象将在池中停留一段未知时间。

请注意,这将优化应用程序的内存使用情况,但不会优化性能。 明确释放对象可能会降低应用程序的速度。 您有时需要决定是否需要更快的应用程序,或者使用更少内存的应用程序。

尽可能尝试使用C代码。例如,如果您只需要在数组中存储对象,除非依赖于特定方法,否则不要使用NSMutableArray。 如果没有,请使用'id *'变量,并使用malloc()和free()。​​

希望这有点帮助......:)

答案 1 :(得分:3)

如果您的循环可能会执行多次次,那么在这种情况下手动管理NSAutoreleasePool可能是值得的。通常情况下,你最终会得到很多自动释放的对象(记住Foundation等也生成自动释放的对象)并等待你的线程结束或控制返回到运行循环可能会导致内存问题并减慢你的速度应用。这里没有成功的保证方法,所以你可能需要稍微探讨一下。

巨大的记忆中的一个是图像,以及与它们有关的一切。如果您有一个UITableView,其中有数百行,每个单元格都包含一个图像,您可能不希望将它们全部保留在内存中。您可以在文件系统中保留这些图像的缓存并根据需要加载图像。磁盘I / O可能相对昂贵,但如果你仔细观察内存通知并明智地预读,你几乎不会注意到性能影响。

在尝试减少应用内存使用时要记住的关键技术是使用静态分析器(Cmd + Shift + A)和Instruments,尤其是对象分配工具。

我试图强迫自己做的一件事是尽可能避免实例变量。它们使您的代码更难维护和消耗内存,因为它们通常在其所有者之前不会被释放。尽量避免使用不必要的实例变量,或者如果可以重新创建它们(例如从磁盘中),请尝试尽早释放它们。