iOS性能优化三部曲(初级)

来源:互联网 发布:精准的日语翻译软件 编辑:程序博客网 时间:2024/05/17 23:21

作为一个对人生对生活要求十全十美的铁杆纯屌丝,每看到一个应用界面像80岁的老婆婆一样,蹒跚不前,真是怒从心里生,就一个字–卸!!所以说性能对用一个应用极其的重要的,所以对于我们iOS高大上的工程师来说,学习一些提升app的性能的技巧和建议是必不可少的,下面咱们就分三步来说,首先说一些初级的应用,大家都知道!

1.使用ARC管理内存
ARC(Automatic Reference Counting,自动引用计数) 和iOS5一起发布,它将众多屌丝程序员从地狱解放到了天堂,不再将主要精力放在管理内存上了,编译器会自动管理对象的申请和释放。
如下边我们创建一个UIView:

UIView *view = [[UIView alloc] init];
// 省略一万字......
[self.view addSubview:view];
[view release]

如果写最后一句,程序就会报错。这是在MRC状态下需要手动释放对象。而ARC会自动在底层为你做这些工作,ARC不仅有效的避免了内存泄露,而且还会释放不再需要的对象的内存,在这个年代如果哪位仁兄还在使用手动管理内存,我只有同情该仁兄了,大哥你该与时俱进了!
2.正确恰当的使用reuseldentifier
在开发中如果没有给UITableViewCell,UICollectionViewCell设置恰当的reuseldentifier,如果哪位仁兄闲着蛋痛,拿着手机就滑,而且cell上还有图片,那这内存嗖嗖的上升,估计会发生闪退的可能。
为了性能优化,在table使用cell时应该先在cell缓存池中是否有可用的cell( - (UITableViewCell *)dequeueReusableCellWithIdentifier:)。如果没有的话,只有创建cell并且设置指定的reuseldentifier
值得注意的是,自从iOS6后,headView和footView也可以使用reuseldentifier

3.尽量把View设置为透明
如果你有透明的View你应该设置它的opaque属性为YES,可能大家没注意到,Apple文档对这个属性的描述如下:(opaque)这个属性给渲染系统提供了一个如何处理这个view的提示。如果设置为YES,渲染系统就认为这个view是完全不透明的,这使得渲染系统优化一些渲染过程和提高性能。如果设置为NO,渲染系统就会正常地和其他内容组成这个View。默认为YES
在常见的界面中,这个属性影响不大。但是当view在 scrollView或者在一些相对比较复杂的动画中,如果不设置这个属性会极大影响app的性能
综上所述:我们只要设置view的opaque为YES就行了!

4.避免庞大或者过多的XIB
在iOS中加入了Storyboards(分镜)正在快速取代XIB。但是在一些复杂的UI,或者自定义可重用的view仍然不可避免的会用到,如果要用到XIB,最好每个XIB绑定一个类,在这个类中处理UI界面或者业务逻辑
关于XIB,Apple在相关文档中有这样的描述:当你加载一个引用了图片或者声音资源的nib时,nib加载代码会把图片和声音文件写进内存。在OSX中,图片和声音资源被缓存在named cache中以便将来用到时获取。在iOS中,仅图片资源会被存进named caches。取决于你所在的平台,使用NSImage或者UIImage的imageNamed:方法来获取图片资源
由上可知,在加载XIB的时候,会把它上边的所有内容放在内存中,这样肯定浪费内存资源,storyboard在加载时仅仅实例化一个UIViewController而已。

5.不要阻塞主线程
大部分阻碍主线程的情形是你在app中做了一些牵涉到读写外部资源I/O操作,比如存储或者网络,我们常使用AFNetworking框架来异步做这些操作。如果需要做其他类型需要消耗巨大资源的操作就用GCD、NSOperation或者NSOperationQueues,下面是一段GCD常用加载费事操作的模板:

        // 加载费事操作        dispatch_async(dispatch_get_main_queue(), ^{            // 主线程        });    });

6.在Image Views中调整图片大小
如果我们要保证在网络或者bundle的图片和你创建的UIImageView的大小相同。在程序运行的过程中调整图片的大小是很浪费资源的一个操作,加入一张图片是从远端服务器加载的,要加载成规定的大小,我们可以下载完成后,使用background thread进行缩放一次,然后再UIImageView中显示图片

7.打开gzip压缩
很多的app依赖于远端资源和第三方API,这样可能需要从远端服务器下载XML、JSON、HTML等等各式的资源,当我们的网络信号比较好时,你好我好大家好,当我们的网络信号不好时,估计心里面万马奔腾啊!
减小文档的一个方式就是在服务器和你的app中打开gzip,这样对于文字性的数据会有显著的效果。当然对于其他的数据,我们们常用的AFNetworking这些框架默认支持gzip。同时像Google App Engine这些云服务提供者也已经支持了压缩输出

以上这些是基本的优化技能,要想更近一层楼,请看下篇中级分享!!

0 0
原创粉丝点击