Objective-C 【copy和内存管理】

来源:互联网 发布:mac os 10.6.8下载dmg 编辑:程序博客网 时间:2024/04/29 19:27
代码:

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

8 0
原创粉丝点击