浅拷贝与深拷贝

在ios中并非所有的对象都支持copy和mutableCopy,只有遵守NSCopying协议的对象才能发送copy消息,同理遵守NSMutableCopying协议的类才能发发送mutableCopy消息。并实现它们各自的copyWithZone和mutableCopyWithZone方法。

浅拷贝copy:

浅拷贝产生的新对象和源对象共享同一个内存空间,也就是所谓的指针复制,当内存销毁的时候,指向这片内存的指针需要重新定义才能使用,否则会成为野指针。

-(void)shallowCopy{
    NSArray *someArr = [NSArray arrayWithObjects:@"Elena",@"Jane",@"Tome" ,nil];
    NSArray *shallowCopyArr = [someArr copyWithZone:nil];
    NSLog(@"\nsomeArr = %p,\nshallowCopyArr = %p",someArr,shallowCopyArr);
    
    NSDictionary *someDic = [NSDictionary dictionaryWithObjectsAndKeys:@"item1",@"Elena",@"item2",@"Tome", nil];
    NSDictionary *shallowCopyDic = [[NSDictionary alloc] initWithDictionary:someDic copyItems:NO];
    NSLog(@"\nsomeDic = %p,\nshallowCopyDic = %p",someDic,shallowCopyDic);
}

打印结果:


a-2.png

深拷贝mutableCopy:

深拷贝产生的对象其内存空间是自主分配的,虽然新对象的值与源对象相同但是内存地址不一样(对象复制),因此两者互不影响,互不干涉。


a-1.png

自定义对象的复制

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.浅拷贝和深拷贝的区别 浅拷贝只是复制对象本身,对象属性包含的对象不复制,不产生新对象,直接指向原有对象。 深拷...
    静水流深_0321阅读 4,678评论 0 3
  • 一 、基本概念 1.1 深拷贝 与 浅拷贝 对象拷贝有两种方式:浅复制和深复制。顾名思义,浅复制,并不拷贝对象本身...
    leonardni阅读 1,711评论 0 0
  • 一、深拷贝和浅拷贝 1.浅拷贝:也可以叫影子拷贝或者指针拷贝,浅拷贝就是对内存地址的复制,会生成一个新的指针指向这...
    4fbc4e24081a阅读 4,746评论 5 4
  • 1、对象拷贝有两种方式:浅复制和深复制。顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针;深复制是直接...
    滴答大阅读 4,155评论 0 2
  • 本文为转载: 作者:zyydeveloper 链接:http://www.jianshu.com/p/5f776a...
    Buddha_like阅读 4,476评论 0 2

友情链接更多精彩内容