autorelease pool显示出apple想做GC的野心,但是终究是嵌入式所以autorelease pool的最大作用是保存临时变量,为什么C++不需要autorelease pool呢,因为C++对申请在heap上的对象的有效范围没有约束,只要没有被release掉指针还找得到,那不会因为跑到了函数外面就没有了,但是objective c不会这样,他总是不断的在想这个对象有没有出有效作用范围,要不要释放,那就需要一个autorelease pool来弥补在有效范围上的不足。
一般来讲一个程序自身只要一个pool就够了,但是也不排除一些特别情况,比如另外启动了一个线程,或者如下面的代码所示有大量的小的object
- (void)useALoadOfNumbers {
for (int j = 0; j < 10000; ++j) {
@autoreleasepool {
for (int i = 0; i < 10000; ++i) {
NSNumber *number = [NSNumber numberWithInt:(i+j)];
NSLog(@"number = %p", number);
}
}
}
}