gpt4 book ai didi

ios:为什么临时加载 XIB 来获取帧高度会损坏内存?

转载 作者:行者123 更新时间:2023-11-29 04:40:21 25 4
gpt4 key购买 nike

我正在尝试获取在自己的 XIB 中定义的几个 UITableCellView 的高度。我创建了 UITableViewDelegate 的回调 heightForRowInPathIndex 中使用的高度列表。当我这样做时,应用程序崩溃,就像内存损坏一样。

arrayOfTableCellView = [[NSBundle mainBundle] loadNibNamed:@"TableCellXyz" owner:self options:nil];

UITableViewCell *cellOfXyz = (UITableViewCell*) [arrayOfTableCellView objectAtIndex:0];

[arrayCellHeights insertObject:[NSNumber numberWithInt:cellOfAlerts.frame.size.height] atIndex:kIndexXyz];

[arrayOfTableCellView release];

我查看了retainCount,它符合预期。

最佳答案

答案很简单,来自文档:

Return Value

An array containing the top-level objects in the nib file. The arraydoes not contain references to the File’s Owner or any proxy objects;it contains only those objects that were instantiated when the nibfile was unarchived. You should retain either the returned array orthe objects it contains manually to prevent the nib file objects frombeing released prematurely.

看起来您只是将返回值分配给arrayOfTableCellView。如果您想保留返回值,并且 arrayOfTableCellView 实际上是 viewController 上的一个属性,那么您应该使用 self.arrayOfTableCellView 分配它。

如果你不保留它,你不必释放它,因为你不拥有它。所以当你真正得到这样的数组时

NSArray *arrayOfTableCellView = [[NSBundle mainBundle] loadNibNamed:@"TableCellXyz" owner:self options:nil];

那你不想拥有

[arrayOfTableCellView release];

在那里,因为你没有分配该对象。

编辑:

只是为了向您澄清这一点,我刚刚运行了您的代码,并得到了预期的结果:

NSArray * arrayOfTableCellView = [[NSBundle mainBundle] loadNibNamed:@"JLUViewController" owner:self options:nil];

UITableViewCell *cellOfXyz = (UITableViewCell*) [arrayOfTableCellView objectAtIndex:0];

[arrayCellHeights insertObject:[NSNumber numberWithInt:cellOfAlerts.frame.size.height] atIndex:kIndexXyz];

以上代码不会崩溃或导致泄漏。 Instruments 不会报告泄漏,所以不会有问题。

如果添加

[arrayOfTableCellView release];

尽管它会崩溃,报告 EXC_BAD_ACCESS,因为你试图释放一个不属于你的对象。注意我如何将 NSArray 设为局部变量吗?您应该执行相同的操作,因为您不需要将其作为属性,因为您只需在函数的作用域内使用它。另请注意,如果 arrayCellHeights 是 View Controller 内的属性,请始终使用 self.arrayCellHeights 来访问它。

关于ios:为什么临时加载 XIB 来获取帧高度会损坏内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10486504/

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