我是iPhone开发的第一次经历。 我写了一些基本代码来测试NSScanner类,现在我正在研究Leaks工具。似乎这个代码正在泄漏,当我在详细的堆栈中双击我的最后一次调用(在Apple的东西之前)时,被控制的行是评论。
任何人都可以帮我理解为什么会泄漏吗?从逻辑的角度来看,结果是我所期望的,我自己也没有正式分配任何东西(除了xmlblock变量,这是自动释放的btw),所以我不希望发布任何东西......我在哪里我错了? : - )
+(NSSet *)extractXMLSectionsWithTag:(NSString *)tag fromString:(NSString *)source firstOnly:(BOOL)firstOnly
{
if (!source)
return nil;
NSScanner *scanner = [NSScanner scannerWithString:source];
NSString *openingToken = [NSString stringWithFormat:@"<%@", tag];
NSString *closingToken = [NSString stringWithFormat:@"</%@>", tag];
NSMutableSet *sections = [NSMutableSet set];
NSCharacterSet *majorChar = [NSCharacterSet characterSetWithCharactersInString:@">"];
while (![scanner isAtEnd]) {
NSString *xmlBlock = [[[NSString alloc] init] autorelease];
[scanner scanUpToString:openingToken intoString:NULL];
[scanner scanString:openingToken intoString:NULL];
[scanner scanUpToCharactersFromSet:majorChar intoString:NULL];
[scanner scanCharactersFromSet:majorChar intoString:NULL];
[scanner scanUpToString:closingToken intoString:&xmlBlock];
if (![xmlBlock isEqualToString:@""]) { // Leaking line
[sections addObject:xmlBlock];
if (firstOnly) {
break;
}
}
}
return [sections copy];
}
答案 0 :(得分:1)
我很确定泄漏是由于返回[sections copy]引起的,因为你应该返回一个自动释放的字符串 - 而不是保留的字符串。
在XCode中选择“Build&amp; Analyze”选项,看看它对此代码的描述。