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
         */
源对象类型拷贝模式目标对象类型拷贝类型
NSMutableStringcopy不可变 / NSString深拷贝
NSMutableStringmutableCopy可变 / NSMutableString深拷贝
NSStringcopy不可变 / NSString浅拷贝
NSStringmutableCopy可变 / NSMutableString深拷贝

转载于:https://www.cnblogs.com/mustard22/p/11091140.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值