【问题标题】:Custom UITableViewCells UITextField strong or weak reference?自定义 UITableViewCells UITextField 强引用还是弱引用?
【发布时间】:2012-10-15 17:29:19
【问题描述】:

我正在务实地设置一个带有 uitextfields、uisegmentedcontrols 等的 tableview。

这是一个例子

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {

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

    //NSLog(@"creating a new %@", CellIdentifier);

    if([CellIdentifier isEqualToString:@"ID"]) {

       UITextField *newTextField = [[UITextField alloc] initWithFrame:CGRectMake(80, 5, 215, 34)];
        self.idField = newTextField;
        [cell addSubview:self.idField];

    }
}

我正在为所有这些文本字段创建属性,并将它们分配给新创建的字段,如您所见。

我的问题是我应该使用 (nonatomic, strong) 还是 (nonatomic, weak) ?

@property(nonatomic, weak) UITextField *idField;
//Or
@property(nonatomic, strong) UITextField *idField;

【问题讨论】:

  • idField 一次只能是一个文本字段。您是否尝试在您的属性中存储对最近创建的文本字段的引用?你最终想要达到什么目标?如果您的意图是保留对您创建的所有文本字段的引用,则不这样做。
  • 我有一个 idField、upcField、Alias Field、Description 字段等。我这样做是为了可以阅读文本字段。即 [self.idField.text] 它现在可以正常工作。我只是想知道我应该使用强还是弱

标签: objective-c ios uitableview automatic-ref-counting


【解决方案1】:

您根本不应该为这些文本字段创建成员变量。您需要第二个文本字段做什么?也许另一种单元格样式就足以满足您的目的?例如。 UITableViewCellStyleValue1UITableViewCellStyleValue2UITableViewCellStyleSubtitle?

但如果您需要自定义标签,只需为其分配一个标签(例如 tableViewCell 的行),然后通过viewWithTag: 检索它。如果您想直接访问,请考虑自定义 UITableViewCell 子类。

直接回答您的问题:这里可能使用弱引用就足够了,因为 textField 被添加到单元格上,在任何时候都不会被释放(因为它将被重用)。

【讨论】:

  • 实际上它不会被重用,因为这些类型的单元格中只有一种......但是如果用户滚动,它将被删除。我有许多具有不同文本字段、分段控件、图像视图等的不同 tableviewcells。但我需要能够访问它们。
  • 当用户向后滚动时,它会再次出现,对吗?所以它被重复使用。 (在同一地点和相同的内容,但仍然可以重复使用)。意思是:在表被释放之前,它不会在任何时候被释放。
  • 只有当我有足够的内存时......有时(比如当我加载图像时)这些单元格确实被释放了,我必须重新创建它们。因此,我将它们的内容存储在其他地方,当它们重新创建时,我从存储的内容中加载。除非我误解了什么,否则我不同意你的看法。 :) 你似乎比我更有知识所以请填写我;)
  • 你是对的,如果内存越来越少,它们可能会被释放。但特别是那时,你应该让它释放整个单元格 - 也意味着你的 textFields。因此,正如我在答案中所说,您应该使用标签或自定义单元格子类来访问您的文本字段。 (并创建一个新的文本字段,如果需要 - 无论如何你已经用上面发布的代码做了什么)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-24
  • 1970-01-01
相关资源
最近更新 更多