gpt4 book ai didi

ios - 屏幕外时指向 UIlabel 的强指针未指向正确的标签

转载 作者:行者123 更新时间:2023-11-29 10:54:02 25 4
gpt4 key购买 nike

我有一个 UITableView,其中包含我使用 IB 创建的原型(prototype)单元格。我在这个原型(prototype)单元格中有一个 UILabel。我已将此 UILabel 的标记值设置为 5,以便我可以使用 viewForTag: 方法识别它。我还定义了 20 个这样的私有(private)属性

@property(nonatomic, strong) UILabel *label_1;
@property(nonatomic, strong) UILabel *label_2;
.
.
.
@property(nonatomic, strong) UILabel *label_20;

现在,在从 cellForRowAtIndexPath: 创建单元格时,我将每行的 UILabel 分配给相应的属性(第 1 行的 label_1,第 2 行的 label_2,...等)使用 self.label_1 = (UILabel*)[cell viewForTag:5];//5 是我使用 IB 设置的标签值

到目前为止一切都很好。现在,当我运行这个应用程序时,我看到直到 16 的属性都有正确的值,其余为空。这是因为只绘制了前 16 个单元格,因此剩余的属性仍未分配相应的 UILabel。到这里为止一切都很好。现在,当我滚动表格时,剩余的 4 个单元格在屏幕上,前 4 个单元格离开屏幕。现在,当我打印(使用 NSLog(@"%@",self.label_1.text).)每个属性的值时,我发现,其对应标签在屏幕上的属性输出正确的值,而那些在屏幕外的输出随机值(不是 null,只是随机值,也可以关闭其他属性。)

在正常情况下,我想到的第一件事是,一旦行离开屏幕,它们就会被释放,因此属性现在指向某个随机位置(悬挂指针)。但在我的例子中,属性是 strong 所以相应的 UILabel 不应该被释放,直到这个指针存在。任何人都可以解释这里发生了什么吗?

最佳答案

为了节省内存,UITableView 回收了UITableViewCells。当您调用 tableView dequeueReusableCellWithIdentifier: 时,您正在回收单元格。

我的猜测是 label_1 == label_17label_2 == label_18

如果您需要更新这些标签,则需要重新考虑您的设计。所有更新都需要在 tableView:cellForRowAtIndexPath: 中完成。当需要更新单元格中的数据时,需要调用[tableView reloadData],并在tableView:cellForRowAtIndexPath:方法中设置标签的正确值你的 UITableViewDataSource

关于ios - 屏幕外时指向 UIlabel 的强指针未指向正确的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19187089/

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