1.正确使用reuseIdentifier来重用Cells (重用标识符用static修饰,只创建一次);
2.尽量使所有的view opaque,包括Cell自身;
3.尽量少用或不用透明图层;
4.如果Cell内现实的内容来自web,使用异步加载,缓存请求结果;
5.减少subviews的数量
6.在heightForRowAtIndexPath:中尽量不使用cellForRowAtIndexPath:,如果你需要用到它,只用一次然后缓存结果
7.尽量少用addView给Cell动态添加View,可以初始化时就添加,然后通过hide来控制是否显示
- 提前计算并缓存cell高度(缓存到内存 数据模型中),避免重复计算;(ps:heightForRowAtIndexPath 是调用最频繁的代理方法,有多少cell就会被调用多少次,不像cellForRowAtIndexPath只会加载屏幕可见cell的个数)
- 滑动停止后加载图片
方案一:利用NSRunLoop在滑动(UITrackingRunLoopMode)和停止(NSDefaultRunLoopMode)的时候Mode不同来实现:
[imageView performSelector:@selector(setImage:) withObject:nil afterDelay:0 inModes:@[NSDefaultRunLoopMode]];
方案二:利用UIScrollView的代理方法中的scrollViewDidEndDecelerating来实现:
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
// 加载图片
}
- 异步绘制,遇到复杂界面,遇到性能瓶颈时,可能就是突破口;