UITableView中两种重用Cell的方法的区别

两个方法如下:

- (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;这个方法,其实在我们开发过程中,尤其是已经形成自己的代码习惯的情况下,可能这并不是我们关注的点。
首先,我们介绍两个注册Cell的方法,该方法可以在创建tableView的时候调用:

- (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时会自动创建Cell,也就是说我们可以不写:

if (cell == nil)   
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellIdentifier"]; 
}
或者
if (cell == nil)   
    cell= [[[NSBundle  mainBundle]  loadNibNamed:@"TestCell" owner:self options:nil]  lastObject];
}
这些创建Cell的方法。

注意,只有当注册了Cell之后,才可以调用- (__kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath;方法重用,否则程序会奔溃。
但是,- (nullable __kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier;这个方法无论有没有注册Cell都可以调用,区别只是在于当没有可复用的Cell时,是自己手动创建还是系统自动创建。

总而言之,- (__kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath;方法是专门针对注册后的Cell的复用使用的。而- (nullable __kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier;方法是在无论有没有注册的情况都可以调用。而是否注册Cell只是决定你需不需要在没有可以重用的Cell时,新建Cell的事件是由程序员还是系统替你自动生成。

你可能感兴趣的:(UITableView中两种重用Cell的方法的区别)