Objective c 可重用单元出列。。。两排?

Objective c 可重用单元出列。。。两排?,objective-c,uitableview,Objective C,Uitableview,如果单元格和分区正好填充屏幕的大小,或者甚至小于屏幕的高度,为什么要使用dequeueReusableCellWithIdentifier:假设我们有两个分区,每个分区只有一行 例如: switch (indexPath.section) { case kMonitoringSection: { cell = [tableView dequeueReusableCellWithIdentifier:kMonitoringCellIdentifier];

如果单元格和分区正好填充屏幕的大小,或者甚至小于屏幕的高度,为什么要使用dequeueReusableCellWithIdentifier:假设我们有两个分区,每个分区只有一行

例如:

    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的一种方法,尤其是示例通常倾向于关注它想要测试的功能(在本例中是电池状态),而不担心其他任何事情(特别是性能-当然,如果样本是关于性能的,则除外)