iOS tableView的使用

849 阅读1分钟

1、UITableView ReloadData那些坑

调用reloadData 之后,立即调用numberOfRowsInSection,但是cellForRowAt和heightForRow 是异步调用,回到当前RunLoop,布局cell时才会被调用

2、 UITableView reloadData的正确方法

在tableView的dataSource被改变 和 tableView的reloadData被调用之间有个时间差,而正是在这个期间,tableView的delegate方法被调用,如果新的dataSource的count小于原来的dataSource count,crash就很有可能发生了。

3、tableView的reloadData方法与reloadSections的区别

当调用[tableview reload]的时候,当前展示的cell,其实是可以复用的。但是reloadSection 时候,当前的cell是不能用需要再造一个出来(等于有了两个cell)。然后再执行reloadSection的时候就能复用了

4、iOS UITableView reloadData 刷新结束后执行后续操作

[tableView reloadData]并不会等待tableview更新结束后才执行后续代码, 而是立即执行后续代码,然后异步地去计算scrollView的高度,获取cell等等。

小结:datasource代表数据源,delegate代表UI的绘制;reloadData包含了datasource和delegate的方法的调用,而tableview的datasource和delegate是异步执行的,先执行datasource,然后异步执行delegate,那么有可能出现的情况是cell的布局混乱,或者是出现crash的现象。那么为了防止出现crash,需要加入数组越界的判断,以及立即更新cell布局layoutifneeded.