iOS应用性能调优的25个建议和技巧(二)

语言: CN / TW / HK

theme: vuepress

「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」。

初学者性能提升

该部分致力于一些能提高性能的基本改变。但所有开发者都有可能会忽视该部分下的一些建议。

1. 用ARC管理内存

ARC(Automatic Reference Counting, 自动引用计数)和iOS5一起发布,它避免了最常见的也就是经常是由于我们忘记释放内存所造成的内存泄露。它自动为你管理retain和release的过程,所以你就不必去手动干预了。

除了帮你避免内存泄露,ARC还可以帮你提高性能,它能保证释放掉不再需要的对象的内存。

这里有一些更多关于ARC的学习资源:

1> Apple’s official documentation

2> Matthijs Hollemans’s Beginning ARC in iOS Tutorial

3> Tony Dahbura’s How To Enable ARC in a Cocos2D 2.X Project

4> If you still aren’t convinced of the benefits of ARC, check out this article on eight myths about ARC to really convince you why you should be using it.

ARC当然不能为你排除所有内存泄露的可能性。由于阻塞、retain 周期、管理不完善的CoreFoundation object(还有C结构)或者就是代码太烂依然能导致内存泄露。一篇介绍ARC不能做到以及我们该怎么做的文章

2. 在正确的地方使用reuseIdentifier

一个开发中常见的错误就是没有给UITableViewCells, UICollectionViewCells,甚至是UITableViewHeaderFooterViews设置正确的reuseIdentifier。

为了性能最优化,table view用 tableView:cellForRowAtIndexPath: 代理方法为rows分配cells的时候,它的数据应该重用自UITableViewCell。 一个table view维持一个队列的数据可重用的UITableViewCell对象。

如果不使用reuseIdentifier的话,每显示一行table view就不得不设置全新的cell。这对性能的影响可是相当大的,尤其会使app的滚动体验大打折扣。自iOS6起,除了UICollectionView的cells和补充views,你也应该在header和footer views中使用reuseIdentifiers。

3. 尽可能使Views透明

如果你有透明的Views你应该设置它们的opaque属性为YES。这会使系统用一个最优的方式渲染这些views。这个简单的属性在IB或者代码里都可以设定。

Apple的文档对于为图片设置透明属性的描述是:(opaque)这个属性给渲染系统提供了一个如何处理这个view的提示。如果设为YES, 渲染系统就认为这个view是完全不透明的,这使得渲染系统优化一些渲染过程和提高性能。如果设置为NO,渲染系统正常地和其它内容组成这个View。默认值是YES。

在相对比较静止的画面中,设置这个属性不会有太大影响。然而当这个view嵌在scroll view里边,或者是一个复杂动画的一部分,不设置这个属性的话会在很大程度上影响app的性能。

你可以在模拟器中用Debug-->Color Blended Layers选项来发现哪些view没有被设置为opaque。目标就是,能设为opaque的就全设为opaque。