gpt4 book ai didi

iphone - xml 解析器中奇怪的 iPhone 内存泄漏

转载 作者:数据小太阳 更新时间:2023-10-29 02:25:20 25 4
gpt4 key购买 nike

更新:我编辑了代码,但问题仍然存在...

大家好,
这是我在这里的第一篇文章 - 我发现这个地方是解决我许多问题的重要资源。通常我会尽力自己解决任何问题,但这次我真的不知道出了什么问题,所以我希望有人能帮助我。
我正在构建一个使用 TouchXML 解析几个 xml 文件的 iPhone 应用程序。我有一个 XMLParser 类,它负责下载和解析结果。当我使用相同的 XMLParser 实例多次解析 xml 文件时,出现内存泄漏。这是解析片段之一(只是相关部分):

for(int counter = 0; counter < [item childCount]; counter++) {  
CXMLNode *child = [item childAtIndex:counter];
if([[child name] isEqualToString:@"PRODUCT"])
{
NSMutableDictionary *product = [[NSMutableDictionary alloc] init];
for(int j = 0; j < [child childCount]; j++) {
CXMLNode *grandchild = [child childAtIndex:j];
if([[grandchild stringValue] length] > 1) {
NSString *trimmedString = [[grandchild stringValue] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[product setObject:trimmedString forKey:[grandchild name]];
}
}

// Add product to current category array
switch (categoryId) {
case 0:
[self.mobil addObject: product];
break;
case 1:
[self.allgemein addObject: product];
break;
case 2:
[self.besitzeIch addObject: product];
break;
case 3:
[self.willIch addObject: product];
break;
default:
break;
}
[product release];
}

}

第一次,我解析 xml 时没有在仪器中显示泄漏,下次我这样做时,我有很多泄漏(NSCFString/NSCFDictionary)。
当我深入研究泄漏的对象时,Instruments 将我指向 CXMLNode.m 中的这一部分:

theStringValue = [NSString stringWithUTF8String:(const char *)theXMLString];
if ( _node->type != CXMLTextKind )
xmlFree(theXMLString);
}

return(theStringValue);

我真的花了很长时间并尝试了多种方法来解决这个问题,但到目前为止都无济于事,也许我遗漏了一些重要的东西?

非常感谢任何帮助,谢谢!

最佳答案

问题可能出在这一行:

[self.mobil addObject:[product copy]];

通过调用 product 的副本,您正在创建一个保留计数为 1 的新 NSMutableDictionary 实例。但是,mobil 实例将增加副本的保留当你向它发送 addObject: 消息时计数,所以副本的保留计数现在是 2。一般来说,一个对象负责处理它自己的对象内存,所以任何时候你发送消息 setFoo:addObject:,你可以直接传递对象,即使它是自动释放的或者你打算在调用后立即释放它;如果需要保留您正在传递的对象,则接收者有责任保留它。

因为您没有将副本分配给任何变量,所以您没有指针可以用来减少副本的保留计数,因为您不再对它感兴趣,所以即使 mobil 在某个时候发布产品副本,副本永远不会达到保留计数 0。for 循环末尾的 [product release] 语句发布原始 product 对象,而不是您创建的副本。

相反,请尝试以下操作,看看乐器是否更快乐:

[self.mobil addObject:product];

关于iphone - xml 解析器中奇怪的 iPhone 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1021413/

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