gpt4 book ai didi

objective-c - 为什么我的 xmlTextReaderConstValue 会发生内存泄漏?

转载 作者:行者123 更新时间:2023-11-29 11:23:19 26 4
gpt4 key购买 nike

我正在编写自己的包装器类来解析 XML 数据。通常我使用泄漏性能工具通过忘记释放分配的内存来检测可疑行为。这时我发现下面的代码(第一行被工具标记)给我带来了巨大的内存泄漏(XML数据文件越大泄漏越多)。以下部分用于接收节点内的文本。

NSString *currentTagValue = [NSString stringWithCString:(char *)xmlTextReaderConstValue(XMLReader) encoding:NSUTF8StringEncoding];
SEL selector = NSSelectorFromString([NSString stringWithFormat:@"set%@:", [currentTag capitalizedString]]);
[currentItem performSelector:selector withObject:currentTagValue];

如果我添加

[currentTagValue release]

内存泄漏消失了。

这对我来说似乎很奇怪,因为我没有手动为 NSString 分配内存。这就是为什么我认为它会自动发布。如果将上面的代码示例与负责获取节点名称的部分进行比较,整个情况就变得奇怪了。

NSString *currentTagName = [NSString stringWithCString:(char *)xmlTextReaderConstName(XMLReader) encoding:NSUTF8StringEncoding];
SEL selector = NSSelectorFromString([NSString stringWithFormat:@"set%@:", [currentTagName capitalizedString]]);

在这里,我不必添加手动发布,一切正常,我没有内存泄漏。我不确定我描述的问题是否是 xml...ConstValue 函数(工作部分使用 xml...ConstName)的副作用,或者原因是否是之后执行的选择器。

感谢阅读,希望有人能给我解释一下。

最佳答案

您使用的是 libxml2 吗?我还没有使用过 libxml2,但我用谷歌搜索很快发现了这个: http://xmlsoft.org/html/libxml-xmlreader.html

Function: xmlTextReaderConstValue

Returns: the string or NULL if not available. The result will be deallocated on the next Read() operation.

将其与 xmlTextReaderConstName 进行比较

Function: xmlTextReaderConstName

Returns: the local name or NULL if not available, the string is deallocated with the reader.

这可能是库中的泄漏,或者是误报,因为结果似乎是延迟发布(或者是完全不同的东西,因为我没有第一手经验,所以不能这样说)。程序是否因泄漏而崩溃?如果不是,则可能只是误报。

希望对您有所帮助。

关于objective-c - 为什么我的 xmlTextReaderConstValue 会发生内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5539360/

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