gpt4 book ai didi

ios - UITableViewCell : Set UITextField delegate to nil in dealloc

转载 作者:行者123 更新时间:2023-11-28 18:31:06 25 4
gpt4 key购买 nike

我有 UITableView,其中的单元格包含一个 UITextField。我的 UITableViewController 是所有这些文本字段的委托(delegate)。现在,当 UITableViewController 被释放时,我想将所有文本字段的委托(delegate)设置为 nil。文本字段有一个标签,所以一旦我有了一个单元格,我就可以通过它的标签来获取它。

问题是如何获取所有创建的cell?向 UITableView 询问 visibleCells 只返回可见单元格,但它可能会发生,有一行不可见,但它仍然有我的 UIViewController 作为代表。所以我真的需要以某种方式获取所有创建的单元格。 cellForRowAtIndexPath 做同样的事情,所以它对我也不起作用。我在这里看到的唯一方法是将所有文本字段存储在数组中,但是否有更好的方法?

这是一些代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = (UITableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"reuseId"];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"reuseId"];
UITextField *nameTextField = [[UITextField alloc] initWithFrame:nameTextFieldRect];
nameTextField.tag = TEXT_FIELD_TAG;
nameTextField.delegate = self;
[cell.contentView addSubview:nameTextField];
}
return cell;
}

-(void)dealloc
{
// todo: get all text fields and set theirs delegate to nil
}

好吧,大多数答案都表明我不需要将委托(delegate)设置为 nil,但由于我偏执,我怀疑可能会出现以下情况:用户点击“后退”按钮,因此调用了我的 view controllerdealloc。在 dealloc 中,我的 view controller 释放了它的 TableView ,但是此时 tableView 以及所有文本字段仍然存在。如果此时某个文本字段以某种方式调用它的委托(delegate)方法,则应用程序将崩溃,因为委托(delegate)不再是有效对象。

如果有人能解释为什么这种情况不可能发生,那么它会让我相信我不需要将委托(delegate)设置为 nil。

最佳答案

您不需要这样做。所有单元格也将被释放,因此它们将没有对委托(delegate)的引用。

默认情况下,delegate 是弱引用,因此它不会保留您的对象。

关于ios - UITableViewCell : Set UITextField delegate to nil in dealloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29897108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com