浅谈IOS浅拷贝和深拷贝的区别

// 不可变对象==》不可变对象的copy 浅拷贝 地址不发生改变,相当于新的数组指向原来数组的地址,对任何一个进行release结果都一样

        NSArray * array = [[NSArray alloc]initWithObjects:@"1", @"2", nil];

        NSLog(@"array: %p %lu", array, array.retainCount);

        NSArray * array1 = [array copy];

        NSLog(@"array1: %p %lu", array1, array.retainCount);

        

        // 不可变对象==》可变对象的copy  深拷贝 地址发生改变,相当于新创建了一个可变数组,需要对新的数组(对象)进行一次release

        NSMutableArray * array2 = [array mutableCopy];

        NSLog(@"array2: %p %lu", array2, array2.retainCount);

        [array2 addObject:@"3"];

        NSLog(@"%@", array2);

        

        // 可变对象==》不可变对象copy  深拷贝  不论原来是可变对象还是不可变对象,copy后,就只会是不可变对象,地址发生改变,相当于新创建了一个不可变数组(对象),需要对新对象进行一次release

        NSMutableArray *array3 = [[NSMutableArray alloc]initWithObjects:@"a", @"b", nil];

        NSLog(@"array3: %p %lu", array3, array3.retainCount);

        NSArray *array4 = [array3 copy];

        NSLog(@"array4: %p %lu", array4, array4.retainCount);

        

        // 可变对象==》可变对象copy  深拷贝  不论原来是可变对象还是不可变对象,mutablecopy后,就只会是可变对象,地址发生改变,相当于创建了一个新的可变数组(对象),需要对新的对象进行release

        NSMutableArray *array5 = [array3 mutableCopy];

        NSLog(@"array5: %p %lu", array5, array5.retainCount);

        [array5 addObject:@"c"];

        NSLog(@"%@", array5);

        

        [array release];

        [array1 release];

        [array2 release];

        [array3 release];

        [array4 release];

        [array5 release];


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值