Objective-C 【copy和内存管理】

代码:

//    1、浅拷贝
//    NSString *str1=@"lalala";
//    这里不能写成上面的形式,因为"lalala"为字符串常量,系统不会收回,也不会对其作引用计数,即使我们对str1如何retain或release,得到的引用计数都是一个十分大的数字(maxIntValue)
    NSString *str1=[NSString stringWithFormat:@"abc"];
//    使用stringWithFormat创建的NSString为变量,系统会进行引用计数
    NSString *str2=[str1 copy];
    
    NSLog(@"str1.retainCount = %tu,str2.retainCount = %tu",str1.retainCount,str2.retainCount);
//    2015-09-17 16:49:10.246 copy 与内存管理[3932:278152] str1.retainCount = 2,str2.retainCount = 2
//    输出结果是2,那是因为copy是浅拷贝,浅拷贝后str2和str1指针都指向同一个内存空间,并没有产生新的对象(这里相当于两个强指针指向该内存空间,引用计数为2)
    
//    2、深拷贝
    NSString *str3=[NSString stringWithFormat:@"laolao"];
    NSMutableString *str4=[str3 mutableCopy];
    
    NSLog(@"str3.retainCount = %tu,str4.retainCount = %tu",str3.retainCount,str4.retainCount);
//    2015-09-17 17:03:49.495 copy 与内存管理[4044:284962] str3.retainCount = 1,str4.retainCount = 1
//    输出结果是1,这是因为mutableCopy是深拷贝,str3和str4指针指向不同的内存空间,产生了新的对象,也就是产生了新的内存空间,原来的空间和新开辟的空间各有一个强指针指向。所以说引用计数都为1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值