`
jsntghf
  • 浏览: 2532411 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

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

    博客分类:
  • iOS
阅读更多

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

分享到:
评论

相关推荐

    UITableView中Cell重用机制导致内容重复的解决方法

    UITableView 中 Cell 重用机制导致内容重复的解决方法 在 iOS 开发中,UITableView 是一个非常常用的控件,用于显示列表数据。...通过使用上述两种方法,我们可以解决 Cell 重用机制导致内容重复的问题。

    UITableView 的缩放和展开

    1. **Cell的可扩展性**:首先,你需要为UITableView的cell定义两种状态,即展开和收起。你可以通过添加一个额外的标识符来跟踪每个cell的状态,并在`cellForRowAt`方法中根据这个状态决定是否显示子视图(如新的...

    tableView重用机制

    UITableView的重用机制是为了避免一次性创建大量Cell(单元格)导致内存压力过大。它的工作原理是:当一个Cell滑出屏幕范围时,系统会自动将其回收到一个“重用队列”中,然后当需要显示新的Cell时,首先从这个队列...

    iphone应用开发:UITableView的详细讲解(一)

    首先,UITableView是一种控件,用于展示一组行和列的数据。在iOS应用中,它经常被用来构建类似联系人列表或邮件收件箱这样的界面。UITableView由两部分组成:数据源(dataSource)和委托(delegate)。数据源负责...

    IOS UITableView 的简单案例

    在iOS开发中,UITableView是一种非常重要的控件,用于展示列表数据。这个简单的案例将向我们展示如何使用UITableView来显示从plist文件中读取的数据,并且为每个单元格(Cell)设置点击事件。以下是对这个案例的详细...

    ios_UITableView多选全选和删除

    比如,利用`dequeueReusableCellWithIdentifier(_:forIndexPath:)`方法重用单元格以减少内存开销;通过懒加载和条件渲染来提高滚动流畅性;以及合理使用异步加载图片等资源。 总的来说,"ios_UITableView多选全选和...

    iOS中UITableView嵌套UITableView

    在iOS开发中,UITableView是一种常用的UI组件,用于展示列表数据。当需要构建更复杂的用户界面时,有时会遇到在一个UITableView内部嵌套另一个UITableView的情况。这种技术通常被称为“嵌套表格”,能够实现多级目录...

    UITableView 示例代码下载

    首先,UITableView有两种基本样式:分组样式(UITableViewStylePlain)和无分组样式(UITableViewStyleGrouped)。分组样式将数据分为多个视觉上独立的段落,每个段落有自己的头部和尾部,适合呈现有结构的数据;而...

    IOS开发 tableview中cell的用法

    这里,`dequeueReusableCellWithIdentifier`方法用于从缓存池中重用cell,以减少内存消耗和提高性能。 ### NSIndexPath的理解与应用 NSIndexPath用于标识表格中的特定行和组。其两个主要属性`section`和`row`分别...

    【原创】查询uitable中cell的位置.7z

    - 为了避免不必要的计算,使用`dequeueReusableCellWithIdentifier:`来重用cell,只在必要的时候创建新cell。 - 如果需要大量计算cell的位置,考虑使用UICollectionView,它的性能通常优于UITableView,尤其在复杂...

    ios-cell点击下拉.zip

    但这两种控件在iPad上更常见,iPhone上通常不推荐使用。 4. **使用UICollectionView或UIStackView**:在cell内部嵌入一个UICollectionView或UIStackView,点击cell时展示或隐藏这个集合视图或堆栈视图。 四、实现...

    cell设计、编辑窗体

    1. UITableView与UICollectionView:这两种控件都是iOS中用于展示列表数据的视图。UITableView适用于行和列结构的数据展示,而UICollectionView则允许更灵活的布局,可以创建网格、瀑布流等复杂布局。 2. 自定义...

    UI拓展与实践(UITableView).pdf

    此外,还应该利用UITableView的重用机制,通过重用cell来减少内存的使用和提高滚动的流畅度。 从开发的角度来看,使用storyboard进行界面布局是比较直观和便捷的方式。在storyboard中,可以很方便地拖拽UITableView...

    UITableView的优化技巧 - iOS知识库1

    UITableView是iOS应用中非常常见的一种UI组件,用于展示列表数据,尤其在处理大量数据时,其性能优化至关重要。本文将探讨一些UITableView的优化技巧。 首先,我们要了解UITableView的核心思想——重用机制。为了...

    iphone-uitableview的用法

    首先,`UITableView` 是基于 `UICollectionView` 的一种特殊形式,用于显示单一列的数据。它由一系列可重用的单元格(`UITableViewCell`)组成,每个单元格可以包含文本、图像或其他UI元素。创建 `UITableView` 需要...

    包括使用简单的tableview,自定义cell以及界面的跳转,本地存储

    本项目包含两个示例,旨在演示如何高效地使用`UITableView`,包括基本用法、自定义Cell以及页面跳转和本地存储的实现。 首先,简单的`UITableView`使用涉及到以下几个关键知识点: 1. **初始化UITableView**:在 ...

    阿里P5二面面试题

    cell重用机制的原理是在UITableView中维护一个可重用cell池,每次滚动UITableView时,UITableView会从池中获取可重用的cell,减少了cell的创建和销毁,从而提高了性能。在阿里P5二面面试题中,面试官可能会问到...

    ios-UITableView-Swift.zip

    下面我们将深入探讨UITableView的核心概念、使用方法以及Swift中的实现细节。 UITableView的工作原理: UITableView由两大部分组成:数据源(dataSource)和委托(delegate)。数据源负责提供单元格(cell)的内容...

    33-科技头条-3自定义Cell.zip

    1. **UITableViewCell和UICollectionViewCell**:这两种类型的Cell分别用于UITableView和UICollectionView,它们是显示数据的基础组件。自定义Cell意味着我们需要扩展这些类,添加额外的UI元素和功能。 2. ** nib/...

    ComboBox for UITableView.zip

    8. **Block或Target-Action**:这两种机制可以用来处理用户在ComboBox中的选择,实现回调函数,更新相关逻辑。 9. **性能优化**:由于UITableView需要处理大量的Cell,性能优化至关重要。例如,重用机制(cell ...

Global site tag (gtag.js) - Google Analytics