如果我创建一个带有回调的线程,比如..
NSAutoreleasePool* pool = [NSAutoreleasePool alloc] init];
while(1) {
//Process Stuff
}
[pool release];我假设任何自动释放的东西都不会真正被释放,因为池永远不会被耗尽。我可以把周围的东西改成这样:
while(1) {
NSAutoreleasePool* pool = [NSAutoreleasePool alloc] init];
//Process Stuff
[pool release];
}但如此频繁地分配/删除似乎有点浪费。有没有一种方法可以让我留出一个内存块,并在它满的时候释放池?
发布于 2011-08-26 01:44:50
如果您在循环的每次迭代中分配了大量的自动释放的内存,那么为每次迭代创建并释放一个新的内存池是正确的做法,以防止内存堆积。
如果你没有生成太多的自动释放的内存,那么它将不会有什么好处,你只需要外部池。
如果您分配了足够的内存,使得单次迭代无关紧要,但在您完成时有很多内存,那么您可以每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];*你需要确定对自己来说什么是重要的。
发布于 2011-08-26 01:37:07
别担心因为Autorelease is Fast. .。你的第二个选择很好。事实上,在ARC中,由于新的@autoreleasepool { }语法,除了这两个选项之外,很难做任何事情。
https://stackoverflow.com/questions/7194678
复制相似问题