NSScanner内存泄漏

时间:2009-11-14 02:10:46

标签: iphone objective-c memory-leaks

我是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];
}

1 个答案:

答案 0 :(得分:1)

我很确定泄漏是由于返回[sections copy]引起的,因为你应该返回一个自动释放的字符串 - 而不是保留的字符串。

在XCode中选择“Build&amp; Analyze”选项,看看它对此代码的描述。