iOS 之深浅拷贝

2019-08-16  本文已影响0人  碎梦_aimee

1. 深浅copy的本质区别:

浅copy VS 深copy 深copy

打印输出结果:


输出结果:深copy内存地址会改变

由此可见:

两个数组虽然数据一致,但是所指的内存地址不同,说明 mutableCopy 在copy的时候,进行了深copy,把array的底层数据也进行了一份copy;如果使用的浅copy,生成新的指针,指向同一个内存地址。

2.copy的几种具体使用情况

可变数组array,通过浅copy后生成数组array1,然后在给array新增数据

打印结果:


ADC727BA-8586-4C6A-9907-9DD4259734CD.png

<NSCopying> 协议 一般通过- (id)copyWithZone:(NSZone *)zone 方法实现

NSString * str = @"哈哈哈";
 NSString * str2 = str; //这个操作和copy是一样的处理
 NSLog(@"打印出对应的自身地址2%p  内容指针%p  内容=%@",&str2,str2,str2);
 str2 = @"嘻嘻嘻嘻"; //同一个指针,指向不同的内容地址
 NSLog(@"打印出对应的自身地址2%p  内容指针%p  内容=%@",&str2,str2,str2);
    NSLog(@"打印出对应的自身地址2%p  内容指针%p  内容=%@",&str,str,str);

输出结果:

打印出对应的自身地址20x7ffee6d25960 内容指针0x108ed9078 内容=哈哈哈
打印出对应的自身地址20x7ffee6d25960 内容指针0x108ed90d8 内容=嘻嘻嘻嘻
打印出对应的自身地址20x7ffee6d25968 内容指针0x108ed9078 内容=哈哈哈

原始str 与 str2 是 两个指向同一个内存地址的指针,但是在修改了str2 值后,str2指向了新的内存地址
上一篇 下一篇

猜你喜欢

热点阅读