A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© muzipiao 中级黑马   /  2016-4-8 10:39  /  886 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在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在自动释放池结束后不会销毁




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马