zoukankan      html  css  js  c++  java
  • 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 深拷贝
  • 相关阅读:
    Pycharm 调试system-config-users
    只写了两行代码,为什么要花两天时间?
    为开源做贡献的6个技巧
    2020年10月编程语言排行榜
    全球最厉害的 14 位程序员
    6_38_二叉树的后序遍历非递归算法(和先序有些许不一样)
    6_37_二叉树的先序遍历非递归算法
    6_36_相似二叉树
    6_33_两个一维数组判断u是否为v的子孙
    6_34_扩展判断u是否为v的子孙
  • 原文地址:https://www.cnblogs.com/mustard22/p/11091140.html
Copyright © 2011-2022 走看看