1

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

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

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

我不确定为什么这不起作用,它似乎对其他人有用。无论如何,如果我能在这方面得到一些帮助,那就太好了,非常感谢!

4

1 回答 1

2

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

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

编辑:@autoreleasepool 示例:

在父 autoreleasepool 耗尽之前,内存中有 10000 个对象:

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

在内存使用高峰期,该算法在内存中有 10000 个 NSString。但是,请考虑以下变体:

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

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

于 2013-09-21T15:53:24.290 回答