在MRC下,NSArray,NSMutableArray快速创建对象时,例如:[NSArray array];
[NSArray arrayWithObject:id];
[NSArray arrayWithObjects:id1,id2,...,nil]; 或其他方法快速创建对象时候(NSMutableArray类似),集合相当于加入了自动释放池 例如:NSArray *arr1 = [NSArray array]; NSArray *arr2 = [[[NSArray alloc] init] autorelease]; 这两种方式是一样的,会自动加入自动释放池,不需要手动release 将其他对象加入到集合中,集合会在自动释放池结束的时候销毁,集合销毁时,会向集合中所有对象发送一次release
注意:如果这样写:NSArray *arr3=[[NSArray alloc]init],此时,arr3没有加入自动释放池,需要手动release,否则不会释放 可以利用分类Category重写NSArray的dealloc方法,观察NSArray/NSMutableArray销毁的条件 NSArray分类重写dealloc方法: - #import "NSArray+myDealloc.h"
- @implementation NSArray (myDealloc)
- //利用分类重写dealloc方法
- -(void)dealloc{
- NSLog(@"NSArray 已经释放");
- [super dealloc];
- }
- @end
复制代码 主函数中,NSArray *arr= [NSArray array];快速创建对象,arr会在自动释放池结束时销毁 NSArray *arr= [[NSArray alloc]init];方法创建对象,arr在自动释放池结束后不会销毁
|