深拷貝(指針和指向都改變) , 淺拷貝(指針改變,指向不變)指針
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 | 深拷貝 |