我正在编写我自己的包装类来解析XML数据。通常我会使用泄漏性能工具通过忘记释放分配的内存来检测怀疑行为。 此时我发现下面的代码(第一行被工具标记)给我带来了巨大的内存泄漏(XML数据文件变得越大泄漏越多)。 以下部分用于接收节点内的文本。为什么我使用xmlTextReaderConstValue获取内存泄漏?
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)的副作用,或者之后的原因是执行选择器。
感谢您的阅读,希望任何人都可以向我解释。
我确定这是重点。该应用程序不会因此泄漏而崩溃。感谢您的文档链接。 – TRD 2011-04-05 07:26:33
不客气。很高兴我帮了忙。 :) – Altealice 2011-04-05 07:38:03