Objective c 可重用单元出列。。。两排?
如果单元格和分区正好填充屏幕的大小,或者甚至小于屏幕的高度,为什么要使用dequeueReusableCellWithIdentifier:假设我们有两个分区,每个分区只有一行 例如:Objective c 可重用单元出列。。。两排?,objective-c,uitableview,Objective C,Uitableview,如果单元格和分区正好填充屏幕的大小,或者甚至小于屏幕的高度,为什么要使用dequeueReusableCellWithIdentifier:假设我们有两个分区,每个分区只有一行 例如: switch (indexPath.section) { case kMonitoringSection: { cell = [tableView dequeueReusableCellWithIdentifier:kMonitoringCellIdentifier];
switch (indexPath.section)
{
case kMonitoringSection:
{
cell = [tableView dequeueReusableCellWithIdentifier:kMonitoringCellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kMonitoringCellIdentifier] autorelease];
cell.textLabel.text = NSLocalizedString(@"Monitoring", @"");
UISwitch *switchCtl = [[[UISwitch alloc] initWithFrame:CGRectMake(197, 8, 94, 27)] autorelease];
[switchCtl addTarget:self action:@selector(switchAction:) forControlEvents:UIControlEventValueChanged];
switchCtl.backgroundColor = [UIColor clearColor];
[cell.contentView addSubview:switchCtl];
}
break;
}
case kLevelSection:
{
cell = [tableView dequeueReusableCellWithIdentifier:kLevelCellIdentifier];
UILabel *levelLabel = nil;
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kLevelCellIdentifier] autorelease];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.textLabel.text = NSLocalizedString(@"Level", @"");
levelLabel = [[[UILabel alloc] initWithFrame:CGRectMake(171, 11, 120, 21)] autorelease];
levelLabel.tag = kLevelTag;
levelLabel.textAlignment = UITextAlignmentRight;
[cell.contentView addSubview:levelLabel];
levelLabel.backgroundColor = [UIColor clearColor];
}
在示例代码中:BatteryStatus
如果我们有20排,我会理解这一点,但我不确定这里
谢谢如果你不想,你不必打电话给它。这不是一个必需的方法或类似的东西。模板为您提供了它,许多示例使用它,因为它就在那里,如果您将表变大,则不必添加任何方法
如果你认为你不需要它,就不要叫它。如果你不想,就不必叫它。这不是一个必需的方法或类似的东西。模板为您提供了它,许多示例使用它,因为它就在那里,如果您将表变大,则不必添加任何方法
如果您认为不需要它,就不要调用它。每次调用
tableView:cellforrowatinexpath:
时,从头开始实例化一个新单元格是不必要的浪费,因此我认为您应该将两个单元格保留在某个地方
实际上,你可以用任何你想要的方式来实现这一点,但是任何通用的单元缓存解决方案看起来都很像
dequeueReusableCellWithIdentifier:
,如果需求发生变化,任何不太通用的解决方案都可能会妨碍你。在您的示例中使用dequeueReusableCellWithIdentifier:
并没有给您带来有意义的性能或可读性损失,所以为什么要担心它呢?每次调用tableView:CellForRowatingIndexPath:
时从头开始实例化一个新的单元格是不必要的浪费,所以我想你应该把你的两个细胞放在某个地方
实际上,你可以用任何你想要的方式来实现这一点,但是任何通用的单元缓存解决方案看起来都很像
dequeueReusableCellWithIdentifier:
,如果需求发生变化,任何不太通用的解决方案都可能会妨碍你。在您的示例中使用dequeueReusableCellWithIdentifier:
,您的性能或可读性没有受到显著的影响,那么为什么要担心呢?如果您只有一个固定数量的单元格,请在tableView中只显示两个(不同)单元格,并且没有重复的单元格,相反,您应该在XIB中实例化两个单元格(并使用UISwitch
对第一个单元格进行设计,使用自定义的UILabel
对另一个单元格进行设计)并指向它的IBOutlet
更简单、更少的代码,并且在不需要重用单元的情况下完全有意义
一定要阅读,这是一个非常好的资源(就像苹果文档中的所有编程指南一样),并详细解释所有这些。特别是部分“解释了这个确切的用例
因此,当然可以使用
dequeueReusableCellWithIdentifier
,在这种情况下,它不会有什么坏处(可能在BatteryStatus示例中,他们这样做是因为他们不知道它是否真的有用,这只是一种习惯,因为他们总是在有更多行时这样做),但这不是最好的方法
请注意,苹果提供的示例代码并不总是要遵循的解决方案:它们只是执行sthg的一种方法,尤其是示例通常倾向于关注它想要测试的功能(在本例中是电池状态),而不担心其他任何事情(特别是性能-当然,除非样本是关于性能的)。如果您只有一个固定数量的单元格,比如在tableView中只有两个(不同)单元格,并且没有重复的单元格,那么您应该将两个单元格实例化到XIB中(并使用第一个
UISwitch
和另一个自定义UILabel
在那里设计它们)并指向它的IBOutlet
更简单、更少的代码,并且在不需要重用单元的情况下完全有意义
一定要阅读,这是一个非常好的资源(就像苹果文档中的所有编程指南一样),并详细解释了所有这些。特别是“部分解释了这个确切的用例
因此,当然可以使用
dequeueReusableCellWithIdentifier
,在这种情况下,它不会有什么坏处(可能在BatteryStatus示例中,他们这样做是因为他们不知道它是否真的有用,这只是一种习惯,因为他们总是在有更多行时这样做),但这不是最好的方法
请注意,苹果提供的示例代码并不总是要遵循的解决方案:它们只是执行sthg的一种方法,尤其是示例通常倾向于关注它想要测试的功能(在本例中是电池状态),而不担心其他任何事情(特别是性能-当然,如果样本是关于性能的,则除外)