dequeueReusableCellWithIdentifier的返回是否需要判断,文档中似乎有些自相矛盾

iOS 码拜 7年前 (2015-05-01) 497次浏览 0个评论
 

Because the prototype cell is defined in a storyboard, the dequeueReusableCellWithIdentifier: method always returns a valid cell. You don’t need to check the return value against nil and create a cell manually.  
上文摘录于:https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html#//apple_ref/doc/uid/TP40007451-CH7-SW1
上面大概说的是:不需要判断dequeueReusableCellWithIdentifier的返回值

可是,同样,我在官网上看到的示例代码却判断了是否为nil,如下所示:

 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@”MyIdentifier”];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@”MyIdentifier”];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }

这是自相矛盾?如何理解?

dequeueReusableCellWithIdentifier的返回是否需要判断,文档中似乎有些自相矛盾
10分
如果是使用 registerClass, registerNib 由系统来托管cell的创建的话,是不需要判断的。registerClass: registerNib:方法会告知tableview当cell重用失败时是通过何种方式来创建cell 的。 但如果不是使用这两个方法来创建的,则如例子上显示的,需要自己判断cell是否为nil.
dequeueReusableCellWithIdentifier的返回是否需要判断,文档中似乎有些自相矛盾
10分
有两组API:
– (id)dequeueReusableCellWithIdentifier:(NSString *)identifier;  
– (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0);

如果你用第一个API,是需要自己创建cell的,也就是cell有可能为nil;如果你用第二个API,则不可能为nil,因为系统会优先重用,如果没有可重用的,则会自动创建一个cell,要使用这个API的话,你要先注册:
– (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(5_0);
– (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(6_0);


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明dequeueReusableCellWithIdentifier的返回是否需要判断,文档中似乎有些自相矛盾
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!