本文主要是介绍UITableViewCell的复用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
UITableView的动态模式在开发中是很重要的,能够通过对Cell的复用快速的开发一个UITableView.这里对UITableView的动态创建进行一些总结 :
创建一个TableViewController以后,观察TableView的属性,在Content中选择Dynamic Prototypes。在下面可以选择几种Prototype Cells
接下来选中一个Cell,在右边我们可以选择这种原型Cell的Style。接下来最关键的部分是Identifier,身份信息,这个有关于后面我们进行复用的时候需要的信息。
接下来是通过对TableView设置数据源
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{return 1;
}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{switch (section) {case 0:return 4;break;default:return 0;break;}}
这里建立了一个section,section里面有四行
下面是最关键的复用部分。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{static NSString *cellIdentifierForImage=@"UITableViewCellIdentifierKeyWithView";
// static NSString *cellIdentifierForDetail=@"UITableViewCellIdentifierKeyWithDetail";UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifierForImage];switch (indexPath.row) {case 0:{cell.textLabel.text = @"头像";cell.accessoryView = self.avatar;return cell;}case 1:{cell.textLabel.text = @"用户名";cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;cell.detailTextLabel.text= self.nameLabel.text;[cell.detailTextLabel sizeToFit];return cell;}case 2:{cell.textLabel.text = @"修改密码";cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;return cell;}break;default:return cell;break;}return cell;
}
在下面的代码中
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifierForImage];
我们服用了identifier为cellIdentifierForImage的类型的cell。那么在运行的时候,将会复用cellIdentifierForImage的cell创建三个。
对于cell的复用,sdk中提供了两种不同的方法
- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier;
- // Used by the delegate to acquire an already allocated cell, in lieu of allocating a new one.
- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0);
- // newer dequeue method guarantees a cell is returned and resized properly, assuming identifier is registered
上面是是官方文档中对两种方法的解释。
可以看到第二种注释的是在IOS6后可以使用。
那么区别在于什么呢?
一种解释是:
第一种是使用在ARC模式下的,不需要设置全局static,直接使用重用池。
第二种是使用在MRC模式下的,需要设置重用池。
在我实验过后发现
第一种方法在找不到identifier的时候会报错,因为该方法必须找到一个已经alloc的对象。第二种方法如果找不到的时候会返回一个默认的cell。总的来说第二种方法能避免出错。
这篇关于UITableViewCell的复用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!