【问题标题】:iPhone performance optimization best practices [closed]iPhone性能优化最佳实践[关闭]
【发布时间】:2011-01-22 08:34:26
【问题描述】:

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

我认为最好谈谈您在优化应用性能时会执行哪些常见步骤。我现在正在尝试改善我的应用程序内存使用率,我发现当你的应用程序很复杂时,这真的很困难。

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

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

【问题讨论】:

  • 除非您遇到特定的性能问题,否则过早优化通常是一件坏事。此外,您一次只能运行一个应用程序,有什么大不了的,为什么不使用您需要的所有内存?
  • 看这个问题很明显,优化并不为时过早。过早优化的问题不在于它本身还为时过早,而在于它是在一个真正的瓶颈和所用策略的影响不可知的阶段完成的——但这仅适用于特定于应用程序的优化;从一开始就寻求遵循良好实践并没有错,事实上是错误的。巨大的瓶颈最终可能是可以解决的,但低级的局部但无处不在的胖子只能通过重写来消除。

标签: iphone performance memory


【解决方案1】:

如果您有一个循环可能会被执行很多次,那么在这种情况下手动管理NSAutoreleasePool 可能是值得的。通常你会得到很多自动释放的对象(记住 Foundation 等也会生成自动释放的对象)并且等待你的线程结束或控制返回到运行循环可能会导致内存问题并减慢你的应用。这里没有保证成功的秘诀,因此您可能需要进行一些探索。

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

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

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

【讨论】:

    【解决方案2】:

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

    请注意,这将优化应用程序的内存使用,但不会优化性能。 显式释放对象可能会减慢您的应用程序。 有时您必须决定是想要更快的应用程序还是使用更少内存的应用程序。

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

    希望这会有所帮助... :)

    【讨论】:

    • release 更改为 autorelease 会显着提高 iOS 5 和 6 的速度。
    猜你喜欢
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 2012-01-02
    • 2010-10-26
    • 2011-11-21
    • 2011-03-14
    • 2014-01-29
    • 2012-05-14
    相关资源
    最近更新 更多