gpt4 book ai didi

ios - topLevelObjects 的 loadNibNamed 泄漏

转载 作者:行者123 更新时间:2023-11-28 22:35:46 24 4
gpt4 key购买 nike

我正在使用自定义单元格并调用 loadNibNamed:。这似乎会导致内存泄漏,我不确定如何解决。如果之后我将顶级对象设置为 nil,我仍然会遇到泄漏。

topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"customCell" owner:self options:nil];

然后我这样做

for (id currentObject in topLevelObjects){
if ([currentObject isKindOfClass:[UITableViewCell class]]){
cell = (CustomCell *) currentObject;
break;
}
}

然后改变单元格的属性。

自定义单元格具有对属性的强引用,它不是循环引用,所以我不确定这是否是问题所在。使用 ARC 时停止这种废弃内存的正确方法是什么?

最佳答案

我怀疑您的泄漏可能来自 Nib 的导出。请注意 docs 中的这个短语在 loadNibNamed::

To establish outlet connections, this method uses the setValue:forKey: method, which may cause the object in the outlet to be retained automatically.

换句话说,loadNibNamed 有时会因为奇怪的键值编码工作方式而强加额外的保留。

但是,那只是猜测,没有必要,因为您没有必要首先调用 loadNibNamed:!

您正在使用在 nib 中设计的自定义 UITableViewCell 子类?那么为什么不以正常方式执行此操作呢?制作一个包含一个顶级对象的 Nib :单元格。设计 Nib 中的单元格,设置其类别,连接其 socket 等。在您的代码中,在 TableView 上调用 registerNib:forCellReuseIdentifier:,以告知 TableView 有关您的 Nib 的信息。当您稍后调用 dequeueReusableCellWithIdentifier: 时,如果重用堆中没有空闲单元格, TableView 将加载您的 Nib 并将单元格交给您。没有困惑,没有大惊小怪。

关于ios - topLevelObjects 的 loadNibNamed 泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16106483/

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