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这些云服务提供者也已经支持了压缩输出
以上这些是基本的优化技能,要想更近一层楼,请看下篇中级分享!!
- iOS性能优化三部曲(初级)
- iOS性能优化三部曲(中级)
- iOS性能优化三部曲(终极版)
- 网站服务端性能优化三部曲
- 初级 性能优化
- iOS内存优化-初级初级初级初级技巧
- 优化图形性能(iOS)
- IOS性能优化(转)
- iOS内存优化,性能优化
- iOS性能优化翻译稿(第一章)
- iOS优化网络性能(读书笔记)
- iOS程序性能优化(0)
- 深入浅出-iOS程序性能优化 (转)
- iOS性能优化基础篇(0)
- iphone ios 性能优化
- iOS性能优化系列
- ios 性能优化
- IOS性能优化
- 如何在保证单例的安全(避免用户使用init方法)
- Python如何进行中文注释
- C# 生成仿京东页码条,服务器端实现
- __NSCFNumber isEqualToString:的问题
- UITabBarController
- iOS性能优化三部曲(初级)
- iOS网络篇-URLConnection基本使用
- Spring 无法注入静态变量,直接在静态方法中获取bean
- jQuery.trim() 函数详解
- 关于观察者模式的总结
- 正则表达式30分钟入门教程
- Codeforces 612B HDD is Outdated Technology 【水题】
- Linux 机器重启reboot命令
- Android下的屏幕适配