【问题标题】:Optimizing Performance on iPhone在 iPhone 上优化性能
【发布时间】:2012-01-19 17:56:28
【问题描述】:

我今天在 TestFlightApp 上发布了我的 iPhone 应用的第一个测试版。一切都很顺利,直到我注意到应用程序的响应能力非常糟糕。肯定没有我想要的“好”本地人感觉。

我对我的内存分配/释放特别挑剔,所以我认为这不是问题。基本上,我不知道下一步该去哪里来提高我的应用程序的性能。

以下是我认为我的一些放缓可归因于:

  1. 使用 UIAppearance 自定义大多数(如果不是全部)UI 元素的外观。我使用了一种全新的字体、大量的 CAGradientLayers 以及对 CALayer 的大量编辑,以绘制漂亮的阴影。

  2. 显示地图图片和逐项列表的分组 UITableViewCell。

  3. UITableViewCells 的布局在我每次调用 layoutSubviews 时都会更新。

  4. 具有自定义高度的 UITableViewCells。对于 heightForRowAtIndexPath 的每次调用,我都需要重构和重新布局视图,每次都返回准确的高度。

  5. 因为我以编程方式创建视图,具有较长 viewDidLoad 调用的控制器往往加载速度较慢。我可以在 init 调用中偏移哪些代码?

有没有人有任何处理这些问题的提示或技巧?或者,也许人们在发布第一个应用程序时有关于如何应对性能下降的故事?

【问题讨论】:

  • 你在你的 UITableViewCell 中异步加载图片吗?
  • 是的,我愿意。它们是对我的服务器的异步调用。
  • 你做任何形式的后台处理吗?
  • 还有……最重要的是,它是不是感觉一直呆滞,还是时断时续?
  • 对我的服务器的所有调用都是异步的。呆滞取决于视图。 Tableviews 绝对是一个压力点。而且每当我有条件布局时(尤其是 UITableViewCells 很麻烦)

标签: iphone ios performance optimization memory


【解决方案1】:

您是否运行了 Instruments(或其他分析方法)来确定您的应用在哪里花费了大部分时间。在优化错误之前这样做是个好主意。

【讨论】:

  • 老实说,我尝试运行 Instruments 并没有从中获得太多收益,尽管我应该做得更好并坚持下去。我再去看看。
【解决方案2】:

我的回答不会解决你的所有观点,但这里有几点:

1) 确保您使用的是Shadow Paths。路径的性能要好得多。

2) 您使用的是透明度还是圆角?如果是这样,请尝试尽可能降低透明度,并且不要使用CALayercornerRadius 圆角。相反,在需要舍入的视图的drawRect 中使用剪贴蒙版。

4) 也许您可以将高度缓存在一个数组中,而不必每次都重复计算。根据潜在的项目数量,这可能/可能不会很好地扩展,但根据用例可能是可以接受的。

5) 是否有可以重复使用的视图?例如,当我在 UITableViewCell 上有一个自定义选择视图时,我只创建一个由控制器持有的实例并在所有单元格中引用它。

【讨论】:

  • 在不预加载的情况下使用自定义字体也很昂贵。例如,在我的 iPod 上预加载“Chalkduster”中的所有 ascii 符号大约需要 10 秒...
  • @Wayne:感谢您的建议。我会尝试从那里开始。关于高度缓存的好主意,也是。这很有意义。
  • @debleek:如何缓存字体?
猜你喜欢
  • 1970-01-01
  • 2011-01-22
  • 2011-01-05
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-17
  • 2016-05-14
相关资源
最近更新 更多