UITableView性能优化

版权所有,禁止匿名转载;禁止商业使用。

很多人觉得TableView性能优化的难度不在话下,其实事实真的这样嘛?虽然我自己也没做到,今天我只是写出自己的心得,让大家吐槽一下哈!


先来描述一下目标


在iPhone4及以上的机器快速滚动tableView,加载多样化数据,显示多样化内容,不会发生卡顿。 

步骤如下:


尽量少用绘制的代码(很多人想吐槽,我的cell样式很多不能用图片来完成的,骚年,你错了,微信App的UI元素很多都是用图片组合出来的)


提高动态计算cell的高度效率(很多人告诉我,把时间的复杂度转换为空间复杂度?我说啥!什么意思?然后他说自己google吧!)


缓存cell的高度(很多人说我要更新cell的内容、或者其他东西,总结就是要更新某一个model的状态,这里涉及到缓存策略,后面会说明)


尽量少改变UI控件的frame,如果对长文本的UITextView来说,或者你用高端的CoreText,当你改变frame,都会调用layoutSubViews,这个是无疑的,难倒你用CoreText不需要重绘嘛?(解决方案:我猜测可以用多样式UI控件去满足你多样化的业务展示)


少用reloadData方法,但是用insert reloadRow方法也会重新调用计算cell高度的方法,但是这里有点不一样,只是刷新可见cells的刷新,而不是整个tableView的cell,不过还是有点消耗资源


现在的业务需要显示图片是非常正常的了,那大家都知道用多线程异步加载,但是这样就够了嘛?那他又会说,那我做级联缓存,从而提高效率,难倒这样就真的妥当了嘛?其实我觉得还少一个控制,尽量利用好UIScrollView的delegate,刚开始滚动UIScrollView的时候,暂停所有IO或者network操作,当UIScrollView滚动停止的时候,快速调度可见的cells加载数据,这里需要设计一个灵活可调度的线程。


0 0