table view 是ios中非常重要一个view,它的流畅程度非常影响app的体验。
如果tableview cell 的内容复杂,绘制时间长,由于view的绘制是在主线程上进行的,这样会使tableview 反应卡顿,
那么如何使table view与用户交互更流畅呢?
以下参考wwdc视频,说明解决的方法
(对于所有绘制复杂的view,均适用)
1. 异步加载数据(比如从网络上获取数据)
用非mainqueue,加载数据,用main queue 更新ui
2. 异步绘制(不在主线程上)
在image context 上draw,得到image,然后在mainqueue中添加到uiview中
如下:
UIGraphicsBeginImageContextWithOptions(size,opaque,scale); // draw code UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();
如果view某个位置上有UIResponder,可通过addsubview 的方式增加
3. 使用NSOperationQueue 和 Operation 多线程编程,与GCD相比, operation可以适时取消
比如当view消失时(如viewcontroller disappear或者view removefromsuperview,或者cell didEndDisplayingCell),那么与之相关的操作应取消([operationQueue cancel])
(特别是从网络加载数据,如果viewcontroller disappeared,应该及时取消与该vc相关的数据加载)