深拷贝(指针和指向都改变) , 浅拷贝(指针改变,指向不变)指针
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 | 深拷贝 |