IOS开发之路-Objective-C copy(浅拷贝与深拷贝)
2013-08-08 18:08
399 查看
oc中拷贝分两种,深拷贝和浅拷贝
我个人认为深拷贝就像是windows中文件的复制(拷贝) , 而浅拷贝就像是windows中创建的文件快捷方式.
两者的区别在于 , 复制是创建了一个新的文件拷贝了原来的东西 ,所以就有两个对象 . 因为两个对象所在路径是不一样的.
而快捷方式呢 ,则是引用了原来文件的路径 , 但并不会创建新文件.
深拷贝 和 浅拷贝 原理也一样 .
深拷贝:内容拷贝
,源对象和副本指向的是不同的两个对象。源对象引用计数器不变,副本计数器设置为1;
浅拷贝: 指针拷贝
,
源对象的和副本指向的是同一对象
。
对象的引用计数+1,其实相当于做了一次retain操作。
只有不可变对象创建不可变副本(copy)才是浅拷贝,其他都是深拷贝。
比如:
NSString *string =
@"hello Objective-c";
NSString *str = [string
copy];
NSLog(@"%i",str == string);
NSLog(@"副本计数器:%zi",[str
retainCount]);
上例中string 是不可变字符串 , copy后也会变一个不可变的字符串 。 所以str 指向的是string 的地址 。 所以 i 的值为1 (两对象地址相同).
所以上例是浅拷贝
NSString *string = [NSString
stringWithFormat:@"hello objective-c"];
NSString *str = [string
mutableCopy];
NSLog(@"%i",string == str);
NSLog(@"副本计数器:%zi",[str
retainCount]);
上例中虽然string是不可变字符串 , 但是mutableCopy之后会返回一个可变字符串 。 接收的确实不可变字符串所以 i 为0 (str 和string 地址不相同)
所以是深拷贝
简单的说 判断是深拷贝还是浅拷贝的方式 就是看它有没有生成新的对象 .
如果生成了新的对象那么就是深拷贝 , 反之亦然 .
我个人认为深拷贝就像是windows中文件的复制(拷贝) , 而浅拷贝就像是windows中创建的文件快捷方式.
两者的区别在于 , 复制是创建了一个新的文件拷贝了原来的东西 ,所以就有两个对象 . 因为两个对象所在路径是不一样的.
而快捷方式呢 ,则是引用了原来文件的路径 , 但并不会创建新文件.
深拷贝 和 浅拷贝 原理也一样 .
深拷贝:内容拷贝
,源对象和副本指向的是不同的两个对象。源对象引用计数器不变,副本计数器设置为1;
浅拷贝: 指针拷贝
,
源对象的和副本指向的是同一对象
。
对象的引用计数+1,其实相当于做了一次retain操作。
只有不可变对象创建不可变副本(copy)才是浅拷贝,其他都是深拷贝。
比如:
NSString *string =
@"hello Objective-c";
NSString *str = [string
copy];
NSLog(@"%i",str == string);
NSLog(@"副本计数器:%zi",[str
retainCount]);
上例中string 是不可变字符串 , copy后也会变一个不可变的字符串 。 所以str 指向的是string 的地址 。 所以 i 的值为1 (两对象地址相同).
所以上例是浅拷贝
NSString *string = [NSString
stringWithFormat:@"hello objective-c"];
NSString *str = [string
mutableCopy];
NSLog(@"%i",string == str);
NSLog(@"副本计数器:%zi",[str
retainCount]);
上例中虽然string是不可变字符串 , 但是mutableCopy之后会返回一个可变字符串 。 接收的确实不可变字符串所以 i 为0 (str 和string 地址不相同)
所以是深拷贝
简单的说 判断是深拷贝还是浅拷贝的方式 就是看它有没有生成新的对象 .
如果生成了新的对象那么就是深拷贝 , 反之亦然 .
相关文章推荐
- 个人理解的IOS开发Objective-C中的属性readwrite,readonly,retain,assign,copy,nonatomic,strong,weak.
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解
- IOS开发之路-Objective-C 面向对象编程基础
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解
- IOS开发之路-Objective-C 集合上(笔记)
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解
- ios开发之深拷贝与浅拷贝(mutableCopy与copy)详解
- IOS开发之深拷贝、浅拷贝、mutableCopy、Copy详解
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解
- IOS开发之路-Objective-C 获得单独的年月日及星期
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解
- iOS开发基础:Copy与MutableCopy详解(浅拷贝与深拷贝)
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解
- iOS开发中表视图搜索栏实现中的Objective-C 深浅拷贝问题
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解(shallow copy and deep copy)
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解