iOS性能优化(一)常用小技巧

本文主要介绍在编写代码时,应该注意的一些性能方面的问题。如果在编写阶段,就意识到这些,那后期性能优化,可能会事半功倍。

爱生活,有理想,会思考,能沟通。

1、通过 Storyboard 创建视图对象时,其资源消耗会比直接通过代码创建对象要大的多。所以,对于复杂的动画、视图界面,建议用代码去实现。如果 Storyboard 中的视图太多,每次Xcode打开的时间都很慢,建议按模块创建多个 Storyboard,并且每个 Storyboard 里的视图不要超过20个。

2、尽量推迟对象的创建时间,用懒加载去创建对象。

3、视图布局计算是 App 中最为常见的消耗 CPU 资源的地方。如果能在后台线程提前计算好视图布局、并且对视图布局进行缓存,这样会大大提高性能问题。

常见视图高度计算就是UITableView,如果不做缓存,每次在 heightForRow 里都要计算高度,浪费 CPU 性能。所以,在计算完高度之后,应该将高度保存在 cellForRow 里要显示的 Model 上。在 heightForRow 里返回之前,每次都判断一下,是否有缓存高度,如果有,则直接返回。没有,则去计算。

4、当多个视图重叠在一起显示时,GPU 会首先把他们混合到一起。如果视图结构过于复杂,混合的过程也会消耗很多 GPU 资源。为了减轻这种情况的 GPU 消耗,应当尽量减少视图数量和层次,并在不透明的视图里标明 opaque 属性以避免无用的 Alpha 通道合成。当然,也可以把多个视图预先渲染为一张图片来显示。

5、屏幕上的每个像素点的颜色是由当前像素点上的多层 layer 共同决定的,GPU 会进行计算出混合颜色的 RGB 值,最终显示在屏幕上。而这需要让 GPU 计算,所以我们要尽量避免设置alpha,这样GPU会忽略下面所有的layer,节约计算量。

6、苹果的 GPU 只解析32bit的颜色格式,如果你放一张图片,而它的颜色格式却不是32bit,CPU 会先进行颜色格式转换,再让 GPU 渲染。这样 CPU 就默默做了多余的工作。

7、视图界面上 imageView 的实际大小和后台返回的 image(图片数据) 大小应该一致。不然会触发反锯齿计算,增加性能损耗。所以,针对不同场景建议放置多个尺寸的图片资源,如:常见的大图、小图。

8、离屏渲染,指的是 GPU 在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。离屏渲染的整个过程,需要多次切换上下文环境,而上下文环境的切换是要付出很大的代价。常见的设置图片圆角,就会造成离屏渲染。对于圆角图片不是很多的视图,可以采取这种办法。对于较多圆角图片的视图,可以用一个中间透明的圆形图片遮在 imageView 上。

9、UITableView优化

1.在不等高Cell当中,提前计算Cell的行高。

2.如果Cell中图片的宽高,指定为小数点,会造成锯齿,造成锯齿就会导致离屏渲染。

3.Cell当中的 ImageView 的大小最好是跟 UIImage 是一样大。如果不一样大它会对UIImage做形变操作,Cell当中展示都是小图,点击放大后,再去用大的 imageView 加载大图。

4.加载完毕的数据建议做本地缓存。

5.Cell当中不要动态的添加子控件。一般都在创建时,就把要出现的控件给添加进去,暂时不要显示的就隐藏。

6.尽量减少Cell内部子控件的个数。

7.如果控件非常多,把不需要与用户进行交互的控件,异步绘制成一张图片,把图片添加到Cell当中。

8.如果Cell的高度是固定的建议这样去设置

self.tableView.rowHeight = 65;

不建议在delegate去设置

- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath {

return 65;

}

未完待续...

下一篇:iOS性能优化(二)UITableView自动计算Cell高度思路

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

推荐阅读更多精彩内容