自动释放池NSAutoReleasePool
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]));
}
}
创建自动释放池:
当某函数使用了大量的自动释放对象,内存占用过大,会被系统中止掉,此时就需要手动添加自动释放池来及时释放内存空间。
补充:移动开发 , IOS ,