// // main.m // 集合对象的内存管理
#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool {
#pragma mark - 集合对象的内存管理
//创建对象 Person *p = [Person new]; [p retain]; //验证数组发送release
//定义一个数组并把p放到数组中 //NSArray *arr = [NSArray arrayWithObject:p]; NSMutableArray *marr = [NSMutableArray array]; [marr addObject:p];
NSLog(@"p.retainCount = %lu",p.retainCount);//加入到数组中变成了2个 //只要把对象放到数组中,对象的引用计数就+1
[p release];
//数组在销毁的时候对对象发送了一次releaes 消息
//销毁的顺序:数组先销毁 ---> 数组向自身存放的对象发送release
//总结: //当对象被添加到数组中时,对象的引用计数+1 //当数组销毁的时候,会向其中的元素发送一次release消息 //注意:数组被销毁,其中的元素对象不一样定被销毁
#pragma mark 没有加入自动释放池
Person *p2 = [Person new]; //1
NSMutableArray *arr = [[NSMutableArray alloc]init];
[arr addObject:p2]; //2 // [arr addObject:p2]; //3 [arr removeObject:p2]; //如果对象从数组中移除了,对象的引用计数-1
NSLog(@"%lu",p2.retainCount); [arr release]; //数组被销毁 [p2 release]; //1
} return 0; }
|