UITableView性能优化(二)

3.Cell自己本身内部的调整

首先呢,大家都会用最基本的复用把...

[tableView dequeueReusableCellWithIdentifier:@"reuseID" forIndexPath:indexPath];

很久之前的写法是判断有没有Cell,如果有的话就根据可重用ID去缓存池中去取,否则就自己alloc/init...
现在一般都是提前注册好Cell....

[tableView registerClass:[XXTableViewCell class] forCellReuseIdentifier:@"reuseID"];
    [tableView registerNib:[UINib nibWithNibName:@"yourNibName" bundle:nil] forCellReuseIdentifier:@"reuseID"];

其实吧,Cell内部的子控件越少越好,层次越少越好,但是我们一般都不会去优化这一项,因为产品的需求就是那样,你总不能跑去跟产品说,哎呀,我们的Cell可能会有一点点卡,那个...单元格就别那么花哨了?....
显然那是不可以的嘛...所以我们还是自己敲代码的时候注意一点吧,尽量减少一下subviews的数量...
既然上面那点无法去优化呢,那么咱们还是看看Cell里面其他的地方怎么优化吧...
首先呢,Cell里面显示的内容要提前准备好,数据呢,要提前算好,然后去直接显示;视图呢要提前加载好所有的控件,然后根据你的需要去显示还是隐藏,千万不要再表格滚动的时候再动态的去创建,移除控件....
之前我们公司有一个萌萌哒小弟弟,在画表格的时候那个思路真的是别具一格,TableView不是能够复用嘛,为了不出复用的bug,所以他在滚动的时候先移除所有的UIImageView,然后再滚动的时候手动创建UIImageView.....
只能说年轻人,想法不错.....
一般我们遇到这种情况,首先要考虑先把所有的都依次创建好,然后根据需要去隐藏显示啊,再滚动的时候疯狂创建和移除是非常消耗性能的...

另外,之前第1点也说过,在Cell内部的子控件不要使用alpha,如果非要那种炫酷的模糊效果的话,那么还是麻烦一下美工小姐姐把,或者用Sketch自己搞,或者开上下文自己画,总之方法多多,但是千万别简单的设置一个alpha....
因为alpha会造成混合图层(Blended Layers),滑动的时候也会影响性能....

4.Cell的栅格化处理

首先我们先科普一个小姿势....
Xcode有这么一个小工具,在Development Tools有这么一个叫做Instruments的工具,里面有个叫做Core Animation的东西,是专门检测帧率的

15060448935411.jpg

注意呀!亲爱的小伙伴们,一定要用真机啊,不能用模拟器呀<真机和模拟器的架构是完全不一样的>....
用的时候记得改成降序,然后就能看到手机的刷新帧率了....
众所周知,手机如果想看到完美的屏幕,手机都是要从上到下从左到右一个一个点绘制出来的,而要想产生动画的效果呢,屏幕就要一直去刷新;我们手机会在一秒的时间内重新绘制60次,所以看起来很连贯,因为根据我们的视觉帧率惯性,只要超过24帧就可以感觉到比较流畅的动画了....
不懂?举个栗子🌰...很久之前摄像机拍电脑屏幕是不是感觉会花屏?是因为摄像机拍摄频率是24帧,而屏幕刷新是60帧,所以就花屏了....
而手机程序呢,如果有比较好的显示效果,最好把帧率维持在55以上,大家可以去看一下大厂的app,滚动的时候基本维持在58以上,真的是灰常腻害的....
继续举个栗子🌰,什么时候帧率达不到很高的帧率的呢,就是我们的模型数据在显示之前会做大量的计算,会导致下一次/下下次屏幕刷新之前模型还木有计算完,没计算完..没计算完啊啊啊啊啊啊啊!!!!!
大家想一下,是不是这一帧(下一帧)就跳过去了呢....额...这就是跳帧....这种卡顿,在tableView上面体现的非常明显,用户体验灰常不好!!!!!!!!!
所以,为了用户的体验,最低最低,帧率也要在50+以上才可以

所以的所以,如果要提高表格性能,最终要的就是要减少-----计算量!!!!!!
从而保证每一帧都能够完成计算!!!!!!!
从而达到流畅的效果.....

15060460551447.jpg

模拟器还有一个功能叫做离屏渲染,有细心的小伙伴们可以把这个选项勾上..看看你的视图是不是没有变黄了呢.....
如果没黄呢.可以看看我下面的那一句小代码....<要是黄就算了>...哈哈哈哈哈

那么我们就说栅格化吧,大家想一下,我们在滚动的过程中是否要和Cell里面的内容进行交互呢?不用吧....我们是否需要看到Cell里面的动态效果呢(比如有张gif)?不用吧.....
所以呢,我们可以将Cell中的内容生成一张独立的图像,在屏幕滚动的时候只显示这张图像

cell.layer.shouldRasterize = YES;

其实讲了这么多,栅格化就这么一句代码....
其他注意的地方就是,栅格化的时候一定要指定一下屏幕的分辨率否则会默认使用 *1 来生成图像...

cell.layer.rasterizationScale = [UIScreen mainScreen].scale;

大家再看一下离屏渲染,是不是全都黄了呢,这就是在栅格化的时候单元格变成了一张张图片,然后就黄了....
然后大家在看一下混合图层,在滚动的时候,红红的表格会透露着绿绿的单元格,这也是因为滚动的时候栅格化了一张张图片....

另外,在图层上有一个异步绘制,苹果官方貌似也没怎么介绍过这个,就那么一句话(如果cell比较复杂可以使用,但是平时不建议使用)

cell.layer.drawsAsynchronously = YES;

但是我感觉,用Core Animation跑的时候,帧率的刷新帧率会提高一点吧...

额,就这样~

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

推荐阅读更多精彩内容