Objective-C之深浅拷贝

深拷贝(指针和指向都改变) , 浅拷贝(指针改变,指向不变)

        NSString *s1 = @"string";
NSLog(@"s1 : %p, %p, %@", &s1, s1, [s1 className]); id s2 = s1; // 浅拷贝
NSLog(@"s2 : %p, %p, %@", &s2, s2, [s2 className]); id s3 = [s1 copy]; // 浅拷贝 得到不可变对象
NSLog(@"s3 : %p, %p, %@", &s3, s3, [s3 className]); id s4 = [s1 mutableCopy]; // 深拷贝 得到可变对象
NSLog(@"s4 : %p, %p, %@", &s4, s4, [s4 className]); /**
* s1 : 0x7ffeefbff658, 0x1000020b8, __NSCFConstantString
* s2 : 0x7ffeefbff650, 0x1000020b8, __NSCFConstantString
* s3 : 0x7ffeefbff648, 0x1000020b8, __NSCFConstantString
* s4 : 0x7ffeefbff640, 0x1030197f0, __NSCFString
*/ NSMutableString *ms1 = [NSMutableString stringWithFormat:@"%@", s1];
NSLog(@"ms1 : %p, %p, %@", &ms1, ms1, [ms1 className]); id ms2 = ms1;// 指针指向指针 浅拷贝
NSLog(@"ms2 : %p, %p, %@", &ms2, ms2, [ms2 className]); id ms3 = [s1 copy];// 深拷贝 得到不可变对象
NSLog(@"ms3 : %p, %p, %@", &ms3, ms3, [ms3 className]); id ms4 = [s1 mutableCopy];// 深拷贝 得到可变对象
NSLog(@"ms4 : %p, %p, %@", &ms4, ms4, [ms4 className]); /**
* ms1 : 0x7ffeefbff638, 0x1004297c0, __NSCFString
* ms2 : 0x7ffeefbff630, 0x1004297c0, __NSCFString
* ms3 : 0x7ffeefbff628, 0x1000020b8, __NSCFConstantString
* ms4 : 0x7ffeefbff620, 0x1006378f0, __NSCFString
*/
源对象类型 拷贝模式 目标对象类型 拷贝类型
NSMutableString copy 不可变 / NSString 深拷贝
NSMutableString mutableCopy 可变 / NSMutableString 深拷贝
NSString copy 不可变 / NSString 浅拷贝
NSString mutableCopy 可变 / NSMutableString 深拷贝
上一篇:Java中对象拷贝的两种方式


下一篇:被「李笑来老师」拉黑之「JavaScript微博自动转发的脚本」