- [NSString componentsSeparatedByString:]泄漏

den*_*zen 0 iphone cocoa-touch memory-management objective-c

我有以下代码:

NSString *indexText = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
if (indexText==nil) {
    [indexText release];
    indexText = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
}
[data release];
NSAutoreleasePool *innerPool = [NSAutoreleasePool new];
NSArray *packageList = [indexText componentsSeparatedByString:@"\n\n"]; //if commented out, there's no leak
[indexText release];
[innerPool drain];
Run Code Online (Sandbox Code Playgroud)

我正在执行componentsSeparatedByString:打开indexText,但是我泄漏了相当多的内存,尽管这packageList是自动释放的事实(事实证明,如果我尝试再次释放它,代码会崩溃).当我注释掉这条线时componentsSeparatedByString:,泄漏消失了.

顺便说一句,我正在运行iPhone模拟器时在Activity Monitor中查看内存使用情况; 仪器没有检测到泄漏.泄漏只是一种幻觉,模拟器的特殊性?

Jac*_*kin 7

内存无法真正泄露,componentsSeperatedByString:返回自动释放NSArray.

信任仪器涉及到这些事情.