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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© tz19900926 中级黑马   /  2015-10-3 15:46  /  439 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//
//  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;
}


0 个回复

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