1、所有语言从内存管理上来说分两种,自动内存管理和非自动内存管理。
自动内存管理不需要开发者回收内存,语言会带垃圾回收机制,如java、c++/clr。
非自动内存管理需要开发者管理内存,原则是谁创建谁释放,如c++、Objective-c。
2、Objective-c除了谁创建谁释放的规则外又额外增加了一个autoreleasepool的概念,来帮助管理内存。
3、autoreleasepool是配合autorelease关键字使用的。例如:
NSMutableArray *array=[[[NSMutableArray alloc] init] autorelease];
4、autoreleasepool是可以嵌套的,是一个栈式结构,当创建一个autoreleasepool的时候,会在栈中加入一个哨兵对象,同时设该autoreleasepool为当前autoreleasepool,而后面凡事加了autorelease关键字的对象就都会push到栈中来管理,当autoreleasepool释放的时候,会将当前autoreleasepool创建之后所有的托管对象都发送release消息(注意不是释放,只是引用计数器减1)。
5、autoreleasepool释放的方式有两种,一种是autoreleasepool由用户创建同时块执行完毕会释放,另一种是系统的autoreleasepool,在每次Runloop休眠之前释放并重新创建。
网友评论