iOS app性能优化

发布时间:2017-7-1 11:36:47编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"iOS app性能优化 ",主要涉及到iOS app性能优化 方面的内容,对于iOS app性能优化 感兴趣的同学可以参考一下。

iOS app性能优化

instruments

  在iOS上进行性能分析的时候,首先考虑借助instruments这个利器分析出问题出在哪,不要凭空想象,不然你可能把精力花在了1%的问题上,最后发现其实啥都没优化,比如要查看程序哪些部分最耗时,可以使用Time Profiler,要查看内存是否泄漏了,可以使用Leaks等。关于instruments网上有很多资料,作为一个合格iOS开发者,熟悉这个工具还是很有必要的。

目录

我要给出的建议将分为三个不同的等级: 入门级、 中级和进阶级:
  • 入门级(这是些你一定会经常用在你app开发中的建议)
1. 用ARC管理内存2. 在正确的地方使用reuseIdentifier3. 尽可能使Views透明4. 避免庞大的XIB5. 不要block主线程6. 在Image Views中调整图片大小7. 选择正确的Collection8. 打开gzip压缩
  • 中级(这些是你可能在一些相对复杂情况下可能用到的)
9. 重用和延迟加载Views10. Cache, Cache, 还是Cache!11. 权衡渲染方法12. 处理内存警告13. 重用大开销的对象14. 使用Sprite Sheets15. 避免反复处理数据16. 选择正确的数据格式17. 正确地设定Background Images18. 减少使用Web特性19. 设定Shadow Path20. 优化你的Table View21. 选择正确的数据存储选项
  • 进阶级(这些建议只应该在你确信他们可以解决问题和得心应手的情况下采用)
    22. 加速启动时间23. 使用Autorelease Pool24. 选择是否缓存图片25. 尽量避免日期格式转换
1.用ARC管理内存
  • ARC(Automatic Reference Counting, 自动引用计数)和iOS5一起发布,它避免了最常见的也就是经常是由于我们忘记释放内存所造成的内存泄露。它自动为你管理retain和release的过程,所以你就不必去手动干预了。
    下面是你会经常用来去创建一个View的代码段:

      UIView *view = [[UIView alloc] init];   // ...  [self.view addSubview:view];   [view release];
  • 忘掉代码段结尾的release简直像记得吃饭一样简单。而ARC会自动在底层为你做这些工作。除了帮你避免内存泄露,ARC还可以帮你提高性能,它能保证释放掉不再需要的对象的内存。这都啥年代了,你应该在你的所有项目里使用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。例如一个黑色半透明的可以设置为一个灰色不透明的View替代.原因是这会使系统用一个最优的方式渲染这些views。这个简单的属性在IB或者代码里都可以设定。
  • Apple的文档对于为图片设置透明属性的描述是:
    (opaque)这个属性给渲染系统提供了一个如何处理这个view的提示。如果设为YES, 渲染系统就认为这个view是完全不透明的,这使得渲染系统优化一些渲染过程和提高性能。如果设置为NO,渲染系统正常地和其它内容组成这个View。默认值是YES。
  • 在相对比较静止的画面中,设置这个属性不会有太大影响。然而当这个view嵌在scroll view里边,或者是一个复杂动画的一部分,不设置这个属性的话会在很大程度上影响app的性能。

  • 换种说法,大家可能更好理解:

    只要一个视图的不透明度小于1,就会导致blending.blending操作在iOS的图形处理器(GPU)中完成的,blending主要指的是混合像素颜色的计算。举个例子,我们把两个图层叠加在一起,如果第一个图层的有透明效果,则最终像素的颜色计算需要将第二个图层也考虑进来。这一过程即为Blending。

    为什么Blending会导致性能的损失?

    原因是很直观的,如果一个图层是完全不透明的,则系统直接显示该图层的颜色即可。而如果图层是带透明效果的,则会引入更多的计算,因为需要把下面的图层也包括进来,进行混合后颜色的计算。




上一篇:在VS2013中配置QT5 win7_64
下一篇:方法返回值 前面的<T>是什么?

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款