黑马程序员技术交流社区

标题: 集合对象内存管理探究 [打印本页]

作者: muzipiao    时间: 2016-4-8 10:39
标题: 集合对象内存管理探究
在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方法:
  1. #import "NSArray+myDealloc.h"

  2. @implementation NSArray (myDealloc)
  3. //利用分类重写dealloc方法
  4. -(void)dealloc{
  5.     NSLog(@"NSArray 已经释放");
  6.     [super dealloc];
  7. }

  8. @end
复制代码
主函数中,NSArray *arr= [NSArray array];快速创建对象,arr会在自动释放池结束时销毁
        NSArray *arr= [[NSArray alloc]init];方法创建对象,arr在自动释放池结束后不会销毁









欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2