Depth of Objective-C Copy

Deep copy (and pointers are changed), shallow copy (pointer change, change point)

        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
         */
Source Object Type Copy mode Target object type Copy Type
NSMutableString copy Immutable / NSString Deep copy
NSMutableString mutableCopy Variable / NSMutableString Deep copy
NSString copy Immutable / NSString Shallow copy
NSString mutableCopy Variable / NSMutableString Deep copy

Guess you like

Origin www.cnblogs.com/mustard22/p/11091140.html