NSAutoreleasePool用於支持Coco的引用計數內存管理
//使用ARC時 NSAutorelease *pool = [[NSAutoreleasePool alloc] init]; [pool release]; //是否使用ARC都可以,效率更高 @aurorelease { } + addObject; - addObject; 添加對象到當前線程中有效的自動釋放池,同一個對象可以向釋放池中添加多次,當釋放池銷毀時,對於每次添加的對象都會收到release消息。一般我們不使用這個方法,而是通過向對象發送aurorelease方法來代替。 - (void)drain 在引用計數環境下,作用與release一樣 自動釋放池不能retained, 所以會導致釋放池釋放 當一個自動釋放池被銷毀時,會發送一個release消息給它所有的自動釋放對象,如果一個對象被添加多次,則每次添加的都會被銷毀 。 NSObject: - (oneway void)release; //引用計數器減1, 當為0時,會收到dealloc消息,銷毀對象 - (id)autorelease; //在當前自動釋放池結束時,引用計數器減1,即[pool drain]時銷毀對象 在創建工程時,在main函數中已經有了一個自動釋放池 int main(int argc, char *argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } 創建自動釋放池: 當某函數使用了大量的自動釋放對象,內存占用過大,會被系統中止掉,此時就需要手動添加自動釋放池來及時釋放內存空間。