帶indexPath的方法總是返回一個cell(也就是說不可能為空)砾层,另一個方法是有可能為nil的;
即:在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法中可以省略以下代碼:
if (!cell){
cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
自測版本
在iOS9.3和iOS8.1下測試班套,只要為tableview注冊了相應的cell類睬棚,無論用兩種方法中的哪一種捎谨,都不用手動創(chuàng)建就能獲得cell,不會為nil汉柒。
然而如果沒有為tableview注冊cell類强戴,則
dequeueReusableCellWithIdentifier:forIndexPath:
會crash,crash原因為“must register a nib or a class for the identifier or connect a prototype cell in a storyboard”残家,即
dequeueReusableCellWithIdentifier:forIndexPath:
方法必須與register方法配套使用脑蠕。
但如果沒有為tableview注冊cell類,
dequeueReusableCellWithIdentifier:
方法也不會崩潰跪削,只是會返回nil谴仙,此時需要我們手動創(chuàng)建cell,如果未創(chuàng)建碾盐,則程序會crash晃跺,crash原因為“UITableView failed to obtain a cell from its dataSource”,即此時tableView無法獲取到cell實例毫玖。