iOS技术点iOS备忘录iOS学习

从UITableView优化,推演至APP优化的三个阶段

2017-03-27  本文已影响246人  Eve郑思越

前言

刚开始学习iOS开发的时候就有前辈说,国内的iOS程序员在国外被戏称为UITableView开发者。不管是为了适配4S以下机型的屏幕比例,还是Cell重用机制对内存负荷的降低等原因,都让我们无数次在UIViewController新建完成后立刻添加一个UITableView上去。无论如何,UITableView的开发技巧是任何iOS程序员必须掌握的基本功,对它的优化知识也大部分能间接推演到整个APP的优化中去。在这里结合本人平时收集的一些资料,对这些UITableView的优化手段做一下总结。

一、入门优化

//注册cell
[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"UITableViewCell"];
//获取cell    
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];
推演至APP优化:

尽量利用lazy initialize (延迟加载) 推迟对象创建的时间,并把对象的创建分散到多个任务中去。如果对象可以复用,并且复用的代价比释放、创建新对象要小,那么这类对象应当尽量放到一个缓存池里复用。

推演至APP优化:

同理如上。

以上都是优化UITableView的一些初步手段,特点是实现过程的工作量不大、迭代更改源代码效率高,对付一般的 Cell 可以说绰绰有余。

二、进阶优化

推演至APP优化:

整个APP都应该遵循这个原理,尽量用轻量级的对象来代替重量级的对象实现功能。

进阶优化的手段适用于比较复杂的 Cell 设计,或是入门优化后仍然感觉到卡顿和低帧数现象的情况。

三、锱铢必较优化

以下的UITableView优化手段,非到万不得已或是对性能有极致要求的地步,不推荐使用,过早和过度的优化是完全没有必要的。做性能优化时,也最好是走修改代码 -> Profile -> 修改代码这样一个流程,优先解决最值得优化的地方。

 - (void)display {
    dispatch_async(backgroundQueue, ^{
        CGContextRef ctx = CGBitmapContextCreate(...);
        // draw in context...
        CGImageRef img = CGBitmapContextCreateImage(ctx);
        CFRelease(ctx);
        dispatch_async(mainQueue, ^{
            layer.contents = img;
        });
    });
}

参考链接

iOS应用性能调优的25个建议和技巧
ibireme--iOS 保持界面流畅的技巧

上一篇下一篇

猜你喜欢

热点阅读