概念:
浅拷贝:不拷贝对象,只拷贝对象指针,因此不会产生新的对象。
深拷贝:拷贝对象到新的内存,因此会产生新的对象。
示例:
NSString *string = [[NSString alloc] init];
NSString *s1 = [string copy];
NSString *s2 = [string mutableCopy];
NSLog(@"string==%p, s1--%p, s2==%p", string, s1, s2);
结果:string==0x100fa6320, s1--0x100fa6320, s2==0x604000257b80
NSMutableString *str = [[NSMutableString alloc] init];
NSMutableString *str1 = [str copy];
NSMutableString *str2 = [str mutableCopy];
NSLog(@"str--%p, str1--%p, str2==%p", str, str1, str2);
结果: str--0x604000258060, str1--0x101eb0030, str2==0x604000258150
结论 | mutableCopy | copy |
---|---|---|
可变对象 | 深拷贝 | 深拷贝 |
不可变对象 | 深拷贝 | 浅拷贝 |
然后我们再来看copy关键字的特点:
修改源对象的属性和行为,不会影响副本对象
修改副本对象的属性和行为,不会影响源对象
网友评论