处理自动释放池和线程

Tur*_*age 1 iphone memory-management objective-c nsautoreleasepool

如果我创建一个带回调的线程,比如..

NSAutoreleasePool* pool = [NSAutoreleasePool alloc] init];
while(1) {
   //Process Stuff
}
[pool release];
Run Code Online (Sandbox Code Playgroud)

我认为任何自动释放的东西永远不会被释放,因为池永远不会被耗尽.我可以改变这样的事情:

while(1) {
   NSAutoreleasePool* pool = [NSAutoreleasePool alloc] init];
   //Process Stuff
   [pool release];
}
Run Code Online (Sandbox Code Playgroud)

但是经常分配/删除似乎有点浪费.有没有办法可以留出一块内存,一旦它完全释放池?

jtb*_*des 7

不要担心,因为Autorelease很快.你的第二个选择没问题.事实上,在ARC中,由于新的@autoreleasepool { }语法,除了这两个选项之外很难做任何事情.