Objective-C对象释放错误

时间:2013-09-21 15:50:24

标签: objective-c memory nsautoreleasepool

我是Objective-C的新手,在释放内存时已经遇到了同样的2个问题。这是:

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]intit];
//^^ NSAutoreleasePool is unavailable: not available in automatic reference counting

[lord release];
//^^ Same error as NSAutoreleasePool

我不确定为什么这不起作用,似乎对其他人有效。无论如何,如果我能得到一些帮助就会很棒,非常感谢!

1 个答案:

答案 0 :(得分:2)

使用自动引用计数时,不能手动使用保留/释放/自动释放选择器。手动引用计数是旧的内存管理方式 - 现在,您应该始终使用ARC并忘记手动发送'release'消息,因为它们是由编译器自动插入的。

NSAutoreleasePool被替换为语言级构造@autoreleasepool:https://developer.apple.com/library/ios/documentation/cocoa/conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html

编辑:@autoreleasepool示例:

这里你在内存中有10000个对象,直到父自动释放池耗尽:

for(int i = 0; i < 10000; i++){
    NSString * s = [NSString alloc] initWithFormat:@"%d",i];
}

在其峰值内存使用情况下,此算法在内存中有10000个NSStrings。但是,请考虑以下变体:

for(int i = 0; i < 10000; i++){
    @autoreleasepool{
        NSString * s = [NSString alloc] initWithFormat:@"%d",i];
    }
}

这样,一次只有一个NSString,在每次迭代结束时都会被释放。