我有一个UITableView
使用 IB 创建的原型单元。我UILabel
在这个原型单元中有一个。我已将标签值 5 设置为此UILabel
,以便我可以使用viewForTag:
方法识别它。我还定义了 20 个这样的私有财产
@property(nonatomic, strong) UILabel *label_1;
@property(nonatomic, strong) UILabel *label_2;
.
.
.
@property(nonatomic, strong) UILabel *label_20;
现在,在创建单元格时,cellForRowAtIndexPath:
我UILabel
使用self.label_1 = (UILabel*)[cell viewForTag:5];//5 is the Tag value i have setup using IB
.
到目前为止一切都很好。现在,当我运行这个应用程序时,我看到直到 16 的属性都有正确的值,其余的都是空的。这是因为仅绘制了前 16 个单元格,因此剩余的属性仍未分配相应的UILabel
. 到这里为止一切都很好。现在,当我滚动表格时,剩余的 4 个单元格在屏幕上,前 4 个单元格在屏幕外。现在,当我打印(使用NSLog(@"%@",self.label_1.text)
.)每个属性的值时,我发现屏幕上对应标签的属性输出正确的值,而屏幕外的属性输出随机值(不是 null,只是随机值,可以关闭其他属性也是。)
在正常情况下,我首先想到的是,一旦行离开屏幕,它们就会被释放,因此属性现在指向某个随机位置(悬空指针)。但是在我的例子中,属性是strong
这样的,所以在这个指针存在之前,对应的 UILabel 不应该被释放。谁能解释一下这里发生了什么?