在面试的时候遇到过这种问题,总结了一下给大家分享出来,希望大家能提出宝贵意见与批评
1.缓存与数据。
UITableview 在滑动的时候,如果数据过大或者常用的数据,没有做缓存。每次去请求新的数据在刷新,不仅在滑动流畅上体验不好,性能也会降低。
解决办法就是做缓存,保存在数据库,每次滑动的时候去数据库查找有没有缓存数据,有的话直接读取,避免每次操作数据请求
2.cell的复用机制。
在滑动的时候,遵循cell的复用机制,尽可能不要创建多余的cell
3.根据业务需求,cell上面的各种控件,例如图片、标签。。一些控件,尽量根据drawRect方法去进行绘制。iOS中很多控件都是继承与UIView的,UIView使用过多会造成性能消耗过大。影响渲染的性能
- (void)drawRect:(CGRect)rect {
if (image) {
[image drawAtPoint:imagePoint];
self.image =nil;
} else {
[placeHolder drawAtPoint:imagePoint];
}
[text drawInRect:textRect withFont:font lineBreakMode:UILineBreakModeTailTruncation];
}
4.不要影响主线程
在TableView滑动请求的时候,很大一部分时间是在主线程请求数据加载,然后刷新。这样造成了线程的阻塞
解决方法是在子线程里面请求数据,然后显示一个HUD等待框,提示用户等待一下。然后数据请求好了以后在回调主线程刷新
5.heightForRowAtIndexPath 高度方法根据业务处理尽可能简化
6.头视图、尾视图加载过多的view时候,尽可能去封装,然后去drawRect绘制