Mac OSX objective-c NSString内存泄漏与ARC

时间:2015-04-14 17:16:10

标签: objective-c macos memory-leaks nsstring automatic-ref-counting

今天我用NSStrings测试了一下。可悲的是,当我运行此代码时,我有严重的内存泄漏(xcode工具向我显示):

- (IBAction)start:(id)sender {
    while (true)  // Yes I know that this is an infinity loop
    {
        NSString *test = [[NSString alloc] init];
        test = [NSString stringWithFormat:@"llalalallalalallalalalalallalalllallalalallalal"];
        test = nil; 
        // Why does this leak memory ? I think ARC is releasing it automatically ?
    }
}

这是这些乐器的截图:

enter image description here

请帮助我理解为什么此代码泄漏(ARC已启用)?

1 个答案:

答案 0 :(得分:1)

内存只在自动释放池中,当池耗尽时内存将被回收。通常这是在运行循环循环时,但是在这样的紧密循环中,运行循环永远不会有机会因此需要明确地耗尽池。

在这样的情况下,只需在脚趾循环内添加一个自动释放池:

@autoreleasepool {
    code
}

在这种情况下:

while (true)  // Yes I know that this is an infinity loop
{
    @autoreleasepool {
        NSString *test = [[NSString alloc]init];
        test = [NSString stringWithFormat:@"llalalallalalallalalalalallalalllallalalallalal"];
        test = nil; 
    }
}
没有格式代码的BTW stringWithFormat只是创建字符串,就像字面意思一样:

test = @"llalalallalalallalalalalallalalllallalalallalal";