参考:http://www.jianshu.com/p/ce0cdb1bf20b

       :http://blog.csdn.net/mandmg/article/details/52456862   if (fobject) 是BOOL变量 if (fobj != nil)是指针或者是值       这就是规范。
  • 如果你注册过Cell,在没有可用的cell时,前者会返回nil;而后者永远都会从注册的nib或者class中替你创建一个可用的Cell。也就是说,前者调用你需要手动检查nil,而后者不需要;
  • 如果你从没有注册过cell,在没有可用的cell时,前者会返回nil,后者……直接崩溃!也就是说,调用后者你 必须确保注册过cell

UITableView中有两种重用Cell的方法:

- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier;

- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0);

在iOS 6中 dequeueReusableCellWithIdentifier:被dequeueReusableCellWithIdentifier:forIndexPath:所取代。如此一来,在表格视图中创建并添加UITableViewCell对象会变得更为精简而流畅。而且使用dequeueReusableCellWithIdentifier:forIndexPath:一定会返回cell,系统在默认没有cell可复用的时候会自动创建一个新的cell出来。

使用 dequeueReusableCellWithIdentifier:forIndexPath:的话,必须和下面的两个配套方法配合起来使用:

// Beginning in iOS 6, clients can register a nib or class for each cell.

// If all reuse identifiers are registered, use the newer -dequeueReusableCellWithIdentifier:forIndexPath: to guarantee that a cell instance is returned.

// Instances returned from the new dequeue method will also be properly sized when they are returned.

- (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(5_0);

- (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(6_0);

1、如果是用NIB自定义了一个Cell,那么就调用  registerNib:forCellReuseIdentifier:

2、如果是用代码自定义了一个Cell,那么就调用 registerClass:forCellReuseIdentifier:

以上这两个方法可以在创建UITableView的时候进行调用。

这样在tableView:cellForRowAtIndexPath:方法中就可以省掉下面这些代码:

static NSString *CellIdentifier = @"Cell";

if (cell == nil)

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

取而代之的是下面这句代码:UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

一、使用NIB

1、xib中指定cell的Class为自定义cell的类型(不是设置File’s Owner的Class)

2、调用registerNib:forCellReuseIdentifier:向数据源注册cell

[_tableView registerNib:[UINib nibWithNibName:@"CustomCell" bundle:nil] forCellReuseIdentifier:kCellIdentify];

3、在tableView:cellForRowAtIndexPath:中使用dequeueReusableCellWithIdentifier:forIndexPath:获取重用的cell,如果没有重用的cell,将自动使用提供的nib文件创建cell并返回(如果使用dequeueReusableCellWithIdentifier:需要判断返回的是否为空)

CustomCell*cell=[_tableView dequeueReusableCellWithIdentifier:kCellIdentify forIndexPath:indexPath];

4、获取cell时如果没有可重用cell,将创建新的cell并调用其中的awakeFromNib方法

二、不使用NIB

1、重写自定义cell的initWithStyle:withReuseableCellIdentifier:方法进行布局

2、注册cell [_tableView registerClass:[CustomCell class] forCellReuseIdentifier:kCellIdentify];

3、在tableView:cellForRowAtIndexPath:中使 用dequeueReusableCellWithIdentifier:forIndexPath:获取重用的cell,如果没有重用的cell,将自 动使用提供的class类创建cell并返回CustomCell*cell=[tableView dequeueReusableCellWithIdentifier:kCellIdentify forIndexPath:indexPath];

4、获取cell时如果没有可重用的cell,将调用cell中的initWithStyle:withReuseableCellIdentifier:方法创建新的cell

(0069)iOS开发之dequeueReusableCellWithIdentifier的两个方法的区别相关推荐

  1. iOS开发之UI开发(UITableView)

    UITableView 继承自UIScrollView,性能极佳 UITableView的两种样式 UITableViewStylePlain列表样式 UITableViewStyleGrouped ...

  2. (0045) iOS 开发之MBProgressHUD 源码学习

    (0045) iOS 开发之MBProgressHUD 源码学习 第一部分:学习所得和分析线程 1.  学习到了kvo 的使用 和屏幕方向的旋转判断. 2. 如果调起这个 HUD 的方法不是在主线程调 ...

  3. (0016)iOS 开发之Mac上Navicat Premium 创建远程连接和本地连接

    1.下载安装 (百度云盘里面有安装文件和注册机) 链接: https://pan.baidu.com/s/1kVG1k71 密码: mr5g 破解教程看这篇博客:http://blog.csdn.ne ...

  4. 李洪强iOS开发之RunLoop的原理和核心机制

    李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研 ...

  5. IOS开发之UI基础LOL英雄展示-15

    IOS开发之UI基础LOL英雄展示-15 // // ViewController.m // 15-英雄展示-单组数据 // // Created by 鲁军 on 2021/2/3. //#impo ...

  6. iOS开发之ARC(自动引用计数)

    iOS开发之ARC(自动引用计数) 英文原文:Automatic Reference Counting on iOS 参与翻译(4人): 纶巾客, showme, 李远超, 王宇龙 自动引用计数(AR ...

  7. 图片轮播c语言,IOS开发之UIScrollView实现图片轮播器的无限滚动

    IOS开发之UIScrollView实现图片轮播器的无限滚动 简介 在现在的一些App中常常见到图片轮播器,一般用于展示广告.新闻等数据,在iOS内并没有现成的控件直接实现这种功能,但是通过UIScr ...

  8. iOS开发之c语言入门教程

    苹果作为移动互联的高端品牌,iOS操作系统也被用户公认为是最好用的移动互联网操作系统.据了解,曾一度拒绝为iOS平台对出浏览器的火狐在今年5月份的时候,他们却食言了.今天,Mozilla宣布iOS版F ...

  9. iOS开发之AVKit框架使用

    2019独角兽企业重金招聘Python工程师标准>>> iOS开发之AVKit框架使用 一.引言 在iOS开发框架中,AVKit是一个非常上层,偏应用的框架,它是基于AVFounda ...

最新文章

  1. SlickGrid控件最后一行触数据更新条件
  2. java 能不能回收 文件流_Java文件流关闭和垃圾回收机制
  3. Java第四次作业——面向对象高级特性(继承和多态)
  4. 公文字体字号标准2020_党政机关公文格式(收藏)
  5. 【学习总结】数学-欧拉函数
  6. Ubuntu安装MySQL1 - 失败
  7. 简单排序--插入排序
  8. Progress lifecycle
  9. centos7 服务器安装nginx,mysql,php
  10. Ext学习笔记02 - 构造方法,类继承,类实例方法重写
  11. win10 安装 cognos 10.2.0
  12. python shell运行_Python 执行 Shell 命令
  13. 高中计算机基础知识课件,高中信息技术基础教案
  14. HighNewTech:Gartner发布2021年新兴技术成熟度曲线和2022年重要战略技术趋势(信任、增长和变革三大新兴技术趋势)解读
  15. nandflash地址的物理地址,逻辑地址,spare地址等理解
  16. attribute和property的区别 (转载)
  17. matlab vrp 线性规划,VRP算法学习
  18. 计算机应用多媒体设计是学什么的,数字媒体艺术设计专业是学什么?
  19. apipost中文版
  20. 以色列技术!Amimon无线WHDI技术解析

热门文章

  1. 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果(转)
  2. Java基础-Java中的堆内存和离堆内存机制
  3. 解锁新姿势 |如何利用配置中心规范构建PaaS服务配置
  4. 21.5. 流量控制
  5. 危机边缘第一季/全集Fringe迅雷下载
  6. android开发4:Android布局管理器1(线性布局,相对布局RelativeLayout-案例)
  7. 开源 免费 java CMS - FreeCMS1.2-标签 mailList
  8. 右键 Dos在这里 删除
  9. WinForm禁用窗体自带的关闭功能
  10. Linux (四)其他一些服务的实现