Objective-C 集合对象的内存管理



1.集合对象的内存管理
  当一个对象加入到集合中,数组被销毁了,里面的对象一定会被销毁吗?
  答案:会的,因为当对象被添加到数组时,对象的引用计数会加一
              当数组被释放时,会向数组里的每个对象发送改一个release
 

  
 示例:
  
 @autoreleasepool{
  Person *p = [Person new]; //1
  
  //p在创建时,引用计数为1,
  //把它加入到数组里,引用计数就是2
  //
  NSArray *array = [[NSArray alloc] initWithObject:p];  


  NSMutableArray *marr = [[NSMutableArray alloc] init];
  [marr addObject:p];
  [marr addObject:p];
  [marr removeObject:p];
  
  NSLog(@"p.retainCount = %lu",p.retainCount);//打印2
  
  [marr release];
  [p release];//1
  
  //数组在销毁的时候,对对象发送一个release消息
  
  
  结论: 
    1) 当对象被添加到数组中的时候,对象的引用计数 +1
2) 当数组销毁的时候,数组会向它其中的元素发送一个release消息

注意:数组被销毁时会向数组里面的每个对象发送一次release操作

 }






 
 
 1.官方内存管理原则
   1) 当调用alloc new copy (mutableCopy)方法产生一个新对象的时候,就必须在最后在调用一次release或者autorelease
   2) 当调用retain方法让对象的计数器+1 ,就必须在最后调用一个release或者autorelease
    
 2.集合的内存管理细节
   1) 当把一个对象添加到集合中时,这个对象会做一次retain操作,计数器+1
   2) 当一个集合被销毁时,会对集合里面的所有对象做一次release操作,计数器会-1
   3) 当一个对象从集合中移除时,这个对象会一次release操作,计数器会-1
 
 3.普遍规律
   1) 如果方法名是add\insert开头,那么被添加的对象,计数器会+1
   2) 如果方法是remove\delete开头,那么被移除的对象,计数器-1
 
 
 































































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值