兩個方法如下:
- (nullable __kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier;
- (__kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath;
原本重用Cell只有- (nullable __kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier;
這個方法涨椒,在iOS6之后引進了- (__kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath;
這個方法捌浩,其實在我們開發(fā)過程中荣刑,尤其是已經(jīng)形成自己的代碼習慣的情況下穆刻,可能這并不是我們關注的點能真。
首先雏节,我們介紹兩個注冊Cell的方法醇坝,該方法可以在創(chuàng)建tableView的時候調(diào)用:
- (void)registerNib:(nullable UINib *)nib forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(5_0);
- (void)registerClass:(nullable Class)cellClass forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(6_0);
- (void)registerNib:(nullable UINib *)nib forCellReuseIdentifier:(NSString *)identifier;
含有Xib的Cell用這個方法注冊邑跪。
- (void)registerClass:(nullable Class)cellClass forCellReuseIdentifier:(NSString *)identifier;
自定義不含Xib的Cell使用這個方法注冊。
值得注意的是呼猪,當注冊了Cell之后画畅,兩個重用方法在沒有可重用的Cell時會自動創(chuàng)建Cell,也就是說我們可以不寫:
if (cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellIdentifier"];
}
或者
if (cell == nil)
cell= [[[NSBundle mainBundle] loadNibNamed:@"TestCell" owner:self options:nil] lastObject];
}
這些創(chuàng)建Cell的方法宋距。
注意轴踱,只有當注冊了Cell之后,才可以調(diào)用- (__kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath;
方法重用谚赎,否則程序會奔潰淫僻。
但是诱篷,- (nullable __kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier;
這個方法無論有沒有注冊Cell都可以調(diào)用,區(qū)別只是在于當沒有可復用的Cell時雳灵,是自己手動創(chuàng)建還是系統(tǒng)自動創(chuàng)建棕所。
總而言之,- (__kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath;
方法是專門針對注冊后的Cell的復用使用的悯辙。而- (nullable __kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier;
方法是在無論有沒有注冊的情況都可以調(diào)用琳省。而是否注冊Cell只是決定你需不需要在沒有可以重用的Cell時,新建Cell的事件是由程序員還是系統(tǒng)替你自動生成躲撰。