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 深拷貝
相關文章
相關標籤/搜索