tableView代理方法执行顺序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zyzxrj/article/details/45395429

以前写table也没有关注那么多问题,但是今天突然发现不知道tableView的代理方法执行顺序了解的不是很清楚:于是打了断点来观察执行顺序: 点我下载示例哦


首先numberOfSectionsInTableView最先执行确定一个tableView有多少行section ---举例这里section = 3,每行row = 5

然后执行heightForHeaderInSection和heightForFooterInSection两次

执行numberOfRowsInSection,这里执行三次也是合理的,因为我们并不是每个section的row数都是相同的(题外,我表示并不知道为什么会这么来回执行三次呢)

下面就是绘制cell的函数和cell将要绘制的函数

最后是viewForHeaderInSection,返回每个section的头视图样式,(尾视图也是一样的哦),注意这里不管table上下拖动几次,有几个section就会执行几次,比如这里只会执行三次,下面我们来看三个例子:


1、当section= 1,数据源数组为空时,打印结果如下:

2015-09-11 15:24:17.853 testTableViewHeight[2179:146087] numberOfSectionsInTableView
2015-09-11 15:24:17.854 testTableViewHeight[2179:146087] heightForHeaderInSection
2015-09-11 15:24:17.854 testTableViewHeight[2179:146087] heightForHeaderInSection
2015-09-11 15:24:17.854 testTableViewHeight[2179:146087] heightForFooterInSection
2015-09-11 15:24:17.854 testTableViewHeight[2179:146087] heightForFooterInSection
2015-09-11 15:24:17.854 testTableViewHeight[2179:146087] numberOfRowsInSection
2015-09-11 15:24:17.854 testTableViewHeight[2179:146087] numberOfSectionsInTableView
2015-09-11 15:24:17.854 testTableViewHeight[2179:146087] heightForHeaderInSection
2015-09-11 15:24:17.854 testTableViewHeight[2179:146087] heightForHeaderInSection
2015-09-11 15:24:17.854 testTableViewHeight[2179:146087] heightForFooterInSection
2015-09-11 15:24:17.854 testTableViewHeight[2179:146087] heightForFooterInSection
2015-09-11 15:24:17.854 testTableViewHeight[2179:146087] numberOfRowsInSection
2015-09-11 15:24:17.855 testTableViewHeight[2179:146087] numberOfSectionsInTableView
2015-09-11 15:24:17.856 testTableViewHeight[2179:146087] heightForHeaderInSection
2015-09-11 15:24:17.872 testTableViewHeight[2179:146087] heightForHeaderInSection
2015-09-11 15:24:17.872 testTableViewHeight[2179:146087] heightForFooterInSection
2015-09-11 15:24:17.872 testTableViewHeight[2179:146087] heightForFooterInSection
2015-09-11 15:24:17.873 testTableViewHeight[2179:146087] numberOfRowsInSection
2015-09-11 15:24:17.873 testTableViewHeight[2179:146087] viewForHeaderInSection

2、当section = 1 ,数据源数组记录条数为30,也就是numberOfRowsInSection = 30,但是我一个页面只展示8条时打印结果如下:


2015-09-11 15:27:37.027 testTableViewHeight[2237:149952] numberOfSectionsInTableView
2015-09-11 15:27:37.028 testTableViewHeight[2237:149952] heightForHeaderInSection
2015-09-11 15:27:37.028 testTableViewHeight[2237:149952] heightForHeaderInSection
2015-09-11 15:27:37.028 testTableViewHeight[2237:149952] heightForFooterInSection
2015-09-11 15:27:37.028 testTableViewHeight[2237:149952] heightForFooterInSection
2015-09-11 15:27:37.028 testTableViewHeight[2237:149952] numberOfRowsInSection
2015-09-11 15:27:37.028 testTableViewHeight[2237:149952] numberOfSectionsInTableView
2015-09-11 15:27:37.028 testTableViewHeight[2237:149952] heightForHeaderInSection
2015-09-11 15:27:37.028 testTableViewHeight[2237:149952] heightForHeaderInSection
2015-09-11 15:27:37.028 testTableViewHeight[2237:149952] heightForFooterInSection
2015-09-11 15:27:37.029 testTableViewHeight[2237:149952] heightForFooterInSection
2015-09-11 15:27:37.029 testTableViewHeight[2237:149952] numberOfRowsInSection
2015-09-11 15:27:37.030 testTableViewHeight[2237:149952] numberOfSectionsInTableView
2015-09-11 15:27:37.030 testTableViewHeight[2237:149952] heightForHeaderInSection
2015-09-11 15:27:37.030 testTableViewHeight[2237:149952] heightForHeaderInSection
2015-09-11 15:27:37.030 testTableViewHeight[2237:149952] heightForFooterInSection
2015-09-11 15:27:37.030 testTableViewHeight[2237:149952] heightForFooterInSection
2015-09-11 15:27:37.030 testTableViewHeight[2237:149952] numberOfRowsInSection
2015-09-11 15:27:37.032 testTableViewHeight[2237:149952] cellForRowAtIndexPath
2015-09-11 15:27:37.033 testTableViewHeight[2237:149952] willDisplayCell:forRowAtIndexPath:
2015-09-11 15:27:37.033 testTableViewHeight[2237:149952] cellForRowAtIndexPath
2015-09-11 15:27:37.034 testTableViewHeight[2237:149952] willDisplayCell:forRowAtIndexPath:
2015-09-11 15:27:37.034 testTableViewHeight[2237:149952] cellForRowAtIndexPath
2015-09-11 15:27:37.034 testTableViewHeight[2237:149952] willDisplayCell:forRowAtIndexPath:
2015-09-11 15:27:37.034 testTableViewHeight[2237:149952] cellForRowAtIndexPath
2015-09-11 15:27:37.034 testTableViewHeight[2237:149952] willDisplayCell:forRowAtIndexPath:
2015-09-11 15:27:37.035 testTableViewHeight[2237:149952] cellForRowAtIndexPath
2015-09-11 15:27:37.035 testTableViewHeight[2237:149952] willDisplayCell:forRowAtIndexPath:
2015-09-11 15:27:37.035 testTableViewHeight[2237:149952] cellForRowAtIndexPath
2015-09-11 15:27:37.035 testTableViewHeight[2237:149952] willDisplayCell:forRowAtIndexPath:
2015-09-11 15:27:37.035 testTableViewHeight[2237:149952] cellForRowAtIndexPath
2015-09-11 15:27:37.035 testTableViewHeight[2237:149952] willDisplayCell:forRowAtIndexPath:
2015-09-11 15:27:37.035 testTableViewHeight[2237:149952] cellForRowAtIndexPath
2015-09-11 15:27:37.036 testTableViewHeight[2237:149952] willDisplayCell:forRowAtIndexPath:
2015-09-11 15:27:37.036 testTableViewHeight[2237:149952] viewForHeaderInSection

我们可以看到以下六个方法首先走了三次然后cellForRowAtIndexPath和willDisplayCell:forRowAtIndexPath:两个方法顺序交替执行,次数为展现在界面上的cell数量,因此我们要注意不要再这两个方法里面大量的创建对象,最好是cell为空的时候创建,其他的对象让cell复用机制来解决。--- 这里要注意,表格复用是指当cell的identifier相同是就会去表格的复用池中拿cell,并不代表不会走cell绘制这个方法

numberOfSectionsInTableView  section数目

heightForHeaderInSection  section头视图高度
heightForHeaderInSection  section头视图高度
heightForFooterInSection   section尾视图高度
heightForFooterInSection   section尾视图高度
numberOfRowsInSection   每个section下行数


3、当section = 3 ,每个section下row为5展现结果如下:



执行顺序是:

2015-09-11 15:42:37.909 testTableViewHeight[2417:163537] numberOfSectionsInTableView
2015-09-11 15:42:37.910 testTableViewHeight[2417:163537] heightForHeaderInSection
2015-09-11 15:42:37.910 testTableViewHeight[2417:163537] heightForHeaderInSection
2015-09-11 15:42:37.910 testTableViewHeight[2417:163537] heightForFooterInSection
2015-09-11 15:42:37.910 testTableViewHeight[2417:163537] heightForFooterInSection
2015-09-11 15:42:37.910 testTableViewHeight[2417:163537] numberOfRowsInSection
2015-09-11 15:42:37.910 testTableViewHeight[2417:163537] heightForHeaderInSection
2015-09-11 15:42:37.910 testTableViewHeight[2417:163537] heightForHeaderInSection
2015-09-11 15:42:37.910 testTableViewHeight[2417:163537] heightForFooterInSection
2015-09-11 15:42:37.910 testTableViewHeight[2417:163537] heightForFooterInSection
2015-09-11 15:42:37.910 testTableViewHeight[2417:163537] numberOfRowsInSection
2015-09-11 15:42:37.910 testTableViewHeight[2417:163537] heightForHeaderInSection
2015-09-11 15:42:37.910 testTableViewHeight[2417:163537] heightForHeaderInSection
2015-09-11 15:42:37.910 testTableViewHeight[2417:163537] heightForFooterInSection
2015-09-11 15:42:37.911 testTableViewHeight[2417:163537] heightForFooterInSection
2015-09-11 15:42:37.911 testTableViewHeight[2417:163537] numberOfRowsInSection
以上方法保持这个顺序走了三遍,然后就是cellForRowAtIndexPath和willDisplayCell:forRowAtIndexPath:两个方法顺序交替执行了8次(因为出现在界面上8行cell)最后viewForHeaderInSection和viewForFooterInSection交替执行了两次(因为这里只展现出两行section)

2015-09-11 16:27:32.767 testTableViewHeight[3039:210959] viewForHeaderInSection
2015-09-11 16:27:32.768 testTableViewHeight[3039:210959] viewForFooterInSection
2015-09-11 16:27:32.768 testTableViewHeight[3039:210959] viewForHeaderInSection
2015-09-11 16:27:32.768 testTableViewHeight[3039:210959] viewForFooterInSection


猜你喜欢

转载自blog.csdn.net/zyzxrj/article/details/45395429