UITableView 是iOS开发中非常常用的一个控件,今天来做一些我在使用过程中的分享。
1.UITableView的重用机制
tableView本来就将性能优化到很好了,使用重用机制,不会大量创建cell,这个原理在这里就不用多说,大家都知道。
我要说的是,在最近的两三个月里,一直都没用storyboard和xib,因为来到一家新公司,在这里,所有的约束都是用代码写的,还好我说服了大家用masonry,不然那一段段的约束。。。。呕,天哪!
当然,有一个大牛的同事,他写的约束我真的是服。比如cell,通过判断各种参数就可以通过添加约束搞定不同布局的cell。我真的是望尘莫及,但是,在Apple官方不断完善storyboard和xib的时候,我认为,还是直接拖控件拖约束更有效率一些,所以,不同样式的cell,直接做成不同的类就好了。其实计算并写各种约束的时间,都够用故事版写几个页面了。(似乎有点跑题。。。总之,就是一定要用重用,不同布局的cell,就多写几个自定义的cell类就好了。不要浪费时间做约束,不仅自己懵逼,tableView都懵逼了)
2.高度要给明确的返回
tableView的代理方法中,是要先走heightForRow 这个方法,才会去给cell布局的,所以高度一定要提前给一个明确的返回。在很久以前,刚学习使用tableView的时候,比较粗心没有写这个方法,整个tableView都不显示,那次让我记住一定要给cell返回明确的高度。
当然,cell会有动态的高度,有时候只要约束加的好的话,这个方法可以不写,能够正常显示,但是前提是这个tableView的cell只是有限的几个,大概一个屏幕就可以显示完,否则,还是乖乖的计算高度返回吧。
3.尽量减少控件,尽量不要用半透明
绘制控件是需要时间的,所以能用一个控件解决的事不要用多个,半透明的颜色不要用,clearColor这样的颜色就尽量别用了。
4.不要总是傻傻的reload data
- (void)insertSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation;
- (void)deleteSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation;
- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation
- (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection
- (void)insertRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
- (void)deleteRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
- (void)reloadRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
看这些方法,好好用,比直接无脑的reload data 强多了。
今天想到这几个注意的点,先写这么多,以后继续补充