iOS程序灵魂之性能优化.

导读

一款手机应用 从开发过程中就要做好 性能优化,这样才能 让用户体验度 提升, 假如 我们打开一个应用 出现卡顿, 不流畅,则会很影响 用户对该应用的态度,产品狗 都很注意这些人机交互方面的 体验。性能是一款App的灵魂.

开发人员在处理 性能问题时,需要做的第一件事情就是判断是否是应用自身引起的性能问题,然后再对症下药

不过我得要提一下,“过早的优化是万恶之源”,在需求未定,性能问题不明显时,没必要尝试做优化,而要尽量正确的实现功能。做性能优化时,也最好是走修改代码 -> Profile -> 修改代码这样一个流程,优先解决最值得优化的地方。

对于 CPU 的卡顿,它可以通过内置的 CADisplayLink 检测出来;对于 GPU 带来的卡顿,它用了一个 1x1 的 SKView 来进行监视。



应用层的性能优化通常可以从以下几个方面考虑:

1.了解编程语言的编译原理,使用高效编码方式从语法上提高程序性能;

2.采用合理的数据结构和算法提高程序性能,这往往是决定程序性能的关键;

3.重视界面布局优化;

4.采用多线程、缓存数据、延迟加载、提前加载等手段,解决严重的性能瓶颈;

5.合理配置虚拟机堆内存使用上限和使用率,减少垃圾回收频率;

6.合理使用native代码;

7.合理配置数据库缓存类型和优化SQL语句加快读取速度,使用事务加快写入速度;

8.使用工具分析性能问题,找出性能瓶颈;

9.iOS中性能优化集锦

避免创建不必要的对象,合理的使用单例模式,

创建太多的对象会造成性能低下,这谁都知道,可是为什么呢?首先分配内存本身需要时间,其次虚拟机运行时堆内存使用量是有上限的,当内存到达一定程度时会产生内存警告,系统会自动释放一些闲置的对象.可想而知,如果有对象频繁的创建和销毁,或者内存使用率很高,就会造成应用程序严重卡顿。

单例模式,提供了对唯一实例的受控访问。由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。

离屏渲染问题:

当一个视图中有大量圆角,应该考虑使用Core Graphics的技术进行绘制操作(即Quarz2D绘图)来实现圆角.替代cornerRadius,mask方案.深入一步优化的话,可以考虑异步绘制.在异步线程中绘制圆角.

为了避免离屏渲染,你应当尽量避免使用 layer 的 border、corner、shadow、mask 等技术,而尽量在后台线程预先绘制好对应内容。

视图宽高计算问题:

Layout计算视图布局宽高 是一个相对耗时的操作,当一个界面有大量的需要计算宽高的视图时(如TabbleView),应将视图的宽高进行缓存处理.避免重复的计算.若要再进一步优化的话,可以将计算操作放入工作线程中.等计算完成后再回到主线程刷新UI.

面试官喜欢问的关于SDWebImage的性能优化处理

SDWebImage

框架封装了很多网络异步下载图片的方法,性能也算很不错. 其实我们还可以做进一步优化,在显示简单的单张图片时,可以利用UIView.layer.contents 就足够了,没必要使用 UIImageView 带来额外的资源消耗,为此我们在 CALayer上添加了 setImageWithURL 等方法

TabbleView列表中有多个视觉元素并不需要触摸事件,这些元素可以用图层合成技术预先绘制为一张图。 再进一步减少每个 Cell 内图层的数量,用 CALayer 替换掉 UIView。 当每个 Cell的类型都是相同的,但显示的内容却各部一样,比如有的 Cell 有图片,有的 Cell 里是卡片。把 Cell 按类型划分,进一步减少 Cell内不必要的视图对象和操作,应该能有一些效果。

关于透明度对性能的影响

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

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

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

视图的延迟加载

如果界面中有一部分视图控件不需要立即显示,则我们可以将它设计成延迟加载模式,当真正要使用它的时候再进行创建.


暂且就想到了这么多,剩下的以后再慢慢补上.大家如果有要我补充的可以在下面评论,我有空就补上.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 导读 一款手机应用 从开发过程中就要做好 性能优化,这样才能 让用户体验度 提升, 假如 我们打开一个应用 出现...
    HelloYeah阅读 2,469评论 5 56
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,107评论 29 470
  • iOS系列开发-UITableView性能优化 在我们的日常开发中,很多开发人员最常接触的就是UITableVie...
    spicyShrimp阅读 861评论 0 3
  • 翻译自“Collection View Programming Guide for iOS” 0 关于iOS集合视...
    lakerszhy阅读 3,775评论 1 22
  • 听堂哥说这部剧特别火,本来准备随便瞅瞅看下剧情就算了的,没想到看了两集有种欲罢不能的感觉,剧情片,演技取胜,确实不...
    雅涵姑娘阅读 329评论 0 0