gpt4 book ai didi

iphone - NSMutableString appendString 的内存泄漏

转载 作者:行者123 更新时间:2023-12-03 19:47:32 33 4
gpt4 key购买 nike

我正在使用 XMLParser 来解析一些 XML 数据,它使用 NSMutableString *resultString 来存储标记字符。在每个 (- parser: didStarElement...) 方法中,我分配并初始化 resultString-ivar。

-  (void)parser: (NSXMLParser *)parser didStartElement: (NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName: (NSString *)qName attributes: (NSDictionary *)attributeDict { 
// Alot of if-statements to sort subtags
// /.../
resultString = [[NSMutableString alloc] init];
recordResults = YES;
}

该字符串被 append 到解析器:foundCharacters-方法中。我在某处读到自动释放的对象,例如appendString中的字符串可能会导致内存泄漏的图像。因此,我添加了一个本地自动释放池,以确保它立即被耗尽(但行为没有改变):

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
if(recordResults) {
[resultString appendString: string];
}
[pool drain];
}

在解析器中:didEndElement...我最终释放并清空了 resultsString:

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {

// Alot of if statements to handle differnt tags
// each of which has the structure of the last else-statement
// In other words, I am pretty sure I've covered every possible
// case to prevent the resultString from
// not getting released and niled out
if(...) {
...
}
else if(...) {
...
}
else {
if(resultString != nil) {
[dataDict setObject: resultString forKey: elementName];
[resultString release];
resultString = nil;
}
}

Instruments Leak-tool 将解析器:foundCharacter-method 标记为内存泄漏源,所以我想知道这是否是由appendString 引起的。或者,如果您可以在这段代码中发现一些错误的地方。这是一个相当需要内存的应用程序,在 iPhone 上解析相当多且有时相当大的 XML 文件,所以我的问题是如何找到解决方法,如果 NSMutableString appendString 在这种情况下不合适......

提前致谢!

最佳答案

如果缺少结束标记,则会出现内存泄漏。最好在 parserDidStartDocument: 中进行任何分配,并在 parserDidEndDocument: 中进行释放,因为它们保证是配对的。您无需在 didStartElement 中分配 resultString,只需在那里截断它即可。

关于iphone - NSMutableString appendString 的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2053404/

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