Iphone 如何创建本地自动释放池以节省内存?
苹果说这是一个节省内存的好主意。这在代码中是什么样子的?通常您不需要创建自动释放池,因为系统关心这一点。但是,有时候你需要这样做。它通常是在大环。代码如下所示:Iphone 如何创建本地自动释放池以节省内存?,iphone,memory-management,Iphone,Memory Management,苹果说这是一个节省内存的好主意。这在代码中是什么样子的?通常您不需要创建自动释放池,因为系统关心这一点。但是,有时候你需要这样做。它通常是在大环。代码如下所示: NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; int i; for (i = 0; i < 1000000; i++) { id object = [someArray objectAtIndex:i]; // do somethin
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int i;
for (i = 0; i < 1000000; i++) {
id object = [someArray objectAtIndex:i];
// do something with object
if (i % 1000 == 0) {
[pool release];
pool = [[NSAutoreleasePool alloc] init];
}
}
[pool release];
NSAutoreleasePool*pool=[[NSAutoreleasePool alloc]init];
int i;
对于(i=0;i<1000000;i++){
id object=[someArray objectAtIndex:i];
//用物体做某事
如果(i%1000==0){
[池释放];
池=[[NSAutoreleasePool alloc]init];
}
}
[池释放];
自动释放池作为一个堆栈保存:如果创建一个新的自动释放池,它将添加到堆栈的顶部,并且每个自动释放消息都将接收器放入最顶部的池中。很好的描述。调用objectAtIndex:但是不会向自动释放池添加任何内容,因此可以在没有自动释放池的循环中使用它。请记住,Apple建议使用[pool drain]而不是[pool release]作为将来与GC环境兼容的一种习惯。@Marc Charbonneau那么不在池上调用release不会导致泄漏吗?不,在引用计数的环境中,调用drain与调用release是相同的。有关GC和非GC环境之间差异的更多信息,请查看文档。