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]));
}
}
創建自動釋放池:
當某函數使用了大量的自動釋放對象,內存占用過大,會被系統中止掉,此時就需要手動添加自動釋放池來及時釋放內存空間。