黑马程序员技术交流社区
标题: 集合对象的内存管理 [打印本页]
作者: tz19900926 时间: 2015-10-3 15:46
标题: 集合对象的内存管理
//
// 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;
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |