copy和mutableCopy的区别

当复制对象是可变对象的时候:copy是复制部分内容,当然也不是简单的指针复制,应该是当前类的复制;mutableCopy是深度复制,对所有内容进行的复制,测试代码如下:

    NSMutableArray * muArr = [[NSMutableArray alloc] init];
    [muArr addObject:@"sssssssssss"];
    NSLog(@"局部可变:array:%@  retainCount:%ld address:%p size:%ld",muArr,[muArr retainCount],muArr,class_getInstanceSize([muArr class]));
    
    NSArray * arr = [muArr copy];
    NSLog(@"copy:array:%@  retainCount:%ld address:%p  size:%ld",arr,[arr retainCount],arr,class_getInstanceSize([arr class]));
    
    NSArray * mArr = [muArr mutableCopy];
    NSLog(@"mucopy:array:%@  retainCount:%ld address:%p  size:%ld",mArr,[mArr retainCount],mArr,class_getInstanceSize([mArr class]));
    

当复制对象是不可变对象的时候:copy不复制,直接指向对象;mutableCopy是深度复制,对所有内容进行的复制,测试代码如下:

    NSArray * muArr = [[NSArray alloc] initWithObjects:@"sssssssss", nil];
    NSLog(@"局部不可变:array:%@  retainCount:%ld address:%p size:%ld",muArr,[muArr retainCount],muArr,class_getInstanceSize([muArr class]));
    
    NSArray * arr = [muArr copy];
    NSLog(@"copy:array:%@  retainCount:%ld address:%p  size:%ld",arr,[arr retainCount],arr,class_getInstanceSize([arr class]));
    
    NSArray * mArr = [muArr mutableCopy];
    NSLog(@"mucopy:array:%@  retainCount:%ld address:%p  size:%ld",mArr,[mArr retainCount],mArr,class_getInstanceSize([mArr class]));

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • copy和mutableCopy的区别 深拷贝和浅拷贝的区别 在OC中对象的拷贝方式有两种:深拷贝和浅拷贝.浅拷贝...
    我想做女人阅读 1,824评论 1 1
  • /** 一.系统非容器类对象1.对不可变对象复制:copy是指针复制、mutableCopy是对象复制2.可变对象...
    傲骨天成科技阅读 478评论 0 0
  • 前言 不敢说覆盖OC中所有copy的知识点,但最起码是目前最全的最新的一篇关于 copy的技术文档了。后续发现有新...
    zyydeveloper阅读 3,466评论 4 35
  • 首先以NSString为例,来看看copy和mutableCopy的区别是什么?上代码。 接下来我们来看看NSAr...
    Remantou阅读 496评论 0 0
  • mutableCopy 创建一个新的可变对象,并初始化为原对象的值,新对象的引用计数为 1; copy 返回一个不...
    天亮説晚安阅读 327评论 0 1