如果我创建一个带回调的线程,比如..
NSAutoreleasePool* pool = [NSAutoreleasePool alloc] init];
while(1) {
//Process Stuff
}
[pool release];
我认为任何自动释放的东西都永远不会被释放,因为池永远不会被耗尽。 我可以改变这样的事情:
while(1) {
NSAutoreleasePool* pool = [NSAutoreleasePool alloc] init];
//Process Stuff
[pool release];
}
但是经常分配/删除似乎有点浪费。有没有办法可以留出一块内存并在游戏池满了后释放它?
答案 0 :(得分:7)
不要担心,因为Autorelease is Fast。你的第二个选择没问题。事实上,在ARC中,由于新的@autoreleasepool { }
语法,除了这两个选项之外很难做任何事情。
答案 1 :(得分:1)
如果在循环的每次迭代中分配了大量的自动释放内存,那么为每次迭代创建和释放一个新池是正确的做法,以防止内存堆积。
如果你没有产生太多的自动释放内存,那么它就没有用了,你只需要外部池。
如果你分配了足够的内存,单个迭代是无关紧要的,但是当你完成时有很多,那么你可以每X次迭代创建和释放池。
#define IterationsPerPool 10
NSAutoreleasePool* pool = [NSAutoreleasePool new];
int x = 0;
while(1) {
//Process Stuff
if(++x == IterationsPerPool) {
x = 0;
[pool release];
pool = [NSAutoreleasePool new];
}
}
[pool release];
*您需要确定重要的内容。