作者:高笑228 | 出处:博客园 | 2012/4/22 14:53:20 | 阅读4次

NSString *a = [[NSString alloc]initWithString:@"hello"];
    NSString *b = [a copy];
    NSLog(@"%d   %d",a.retainCount, b.retainCount);// 2,2
    
    NSMutableString *f = [a mutableCopy];
    
     NSLog(@"%d   %d",a.retainCount, f.retainCount);// 2,1
    
    [f appendString:@"dd"];
    NSLog(@"%@,%@",a,f);// hello,hellodd
    // 对于一个不可变对象来说 copy 是浅copy 只是指针复制 其retainCount 1
    // mutablecopy 是深copy 是对象复制
    
    NSMutableString *c = [[NSMutableString alloc]initWithString:@"hello"];
    NSMutableString *d = [c copy];
    NSLog(@"%d  %d",c.retainCount,d.retainCount);// 1,1
    //  [d appendString:@"ddd"]; //error 因为copy返回一个不可改变对象
    NSMutableString *e = [c mutableCopy];
     NSLog(@"%d  %d",c.retainCount,e.retainCount);// 1,1
    [e appendString:@"dddd"];
    NSLog(@"%@,%@",c,e);// hello,hellodddd
    // 对于可变对象来说 copy 和mutablecopy 都是深copy  都是拷贝对象  不过copy返回的对象是一个不可变对象
    //------------------------------------------------------------//
//    对于系统容器类对象
    
     NSArray *array1 = [NSArray arrayWithObjects:@"a",@"b",@"c",nil];
    NSArray *array1Copy = [array1 copy];
    NSLog(@"%d, %d",array1.retainCount,array1Copy.retainCount);//2,2
    NSMutableArray *arrayMcopy = [array1 mutableCopy];
     NSLog(@"%d, %d",array1.retainCount,arrayMcopy.retainCount);//2,1
    [arrayMcopy removeObjectAtIndex:0];
    [arrayMcopy addObject:@"d"];
    NSLog(@"%@-----%@",array1,arrayMcopy);//a,b,c  -----b,c,d
     NSArray *mArray1 = [NSArray arrayWithObjects:[NSMutableString stringWithString:@"a"],@"b",@"c",nil];
    NSArray *mArray1copy = [mArray1 copy];
    NSLog(@"%d,%d",mArray1.retainCount,mArray1copy.retainCount);//2,2
    NSMutableArray *mArrayMcopy = [mArray1 mutableCopy];
    NSLog(@"%d,%d",mArray1.retainCount,mArrayMcopy.retainCount);//2,1
    NSMutableString *temp = [mArray1 objectAtIndex:0];
    NSLog(@"%@",temp);//a
    [temp appendString:@"aa"];
    NSLog(@"%@",mArray1);//aaa b c
    NSLog(@"%@",mArray1copy); //aaa b c
    NSLog(@"%@",mArrayMcopy);// aaa b c
    //对于容器而言,其元素对象始终是指针复制。如果需要元素对象也是对象复制,就需要实现深拷贝。
    NSArray* trueDeepCopyArray = [NSKeyedUnarchiver unarchiveObjectWithData:
                                  [NSKeyedArchiver archivedDataWithRootObject: mArray1]];
    NSMutableString *temp2 = [trueDeepCopyArray objectAtIndex:0];
    [temp2 appendString:@"aa"];
    
    NSLog(@"%@",mArray1);//aaa b c
    NSLog(@"%@",trueDeepCopyArray);//aaaaa b c
    //trueDeepCopyArray是完全意义上的深拷贝

转载于:https://www.cnblogs.com/chengxianghe/p/4305036.html

copy 和 mutablecopy 笔记相关推荐

  1. IOS学习笔记十八(copy、mutableCopy、NSCopying、NSMutableCopy、深复制、浅复制)

    1. copy.mutableCopy方法 copy方法返回对象的不可修改的副本 mutableCopy方法返回的对象可修改的副本 1).测试demo int main(int argc, char ...

  2. [Objective-C] Copy 和 MutableCopy

    看了几篇文章,因为文章很新手向,所以内容很繁琐.故整理一下重点,写了测试程序去了解几个知识点,不讨论基本概念.新博客wossoneri.com传送门 非集合类对象的copy与mutableCopy / ...

  3. strong、copy和mutableCopy详解

    写在前面 关于copy.mutableCopy和strong,一直想好好整理整理,但是因为各种原因搁置了.今天上班时发现老代码中因为这个问题出现了一个特别恶心的大坑,让我下定决心写下这篇博文.如果你认 ...

  4. copy与mutableCopy的内存管理剖析

    title: copy与mutableCopy的内存管理剖析 date: 2016-04-24 16:50:04 tags: copy copy与mutableCopy相关的内存管理 不知道为什么一说 ...

  5. 深浅拷贝的应用-copy、mutableCopy

    ViewController.h #import <UIKit/UIKit.h> @interface ViewController : UIViewController //如果想让li ...

  6. copy和mutableCopy都是浅拷贝!!!

    嗯,标题就是要这么醒目,不然没人看.虽然要追求醒目,但绝不是信口开河.所有系统容器类的copy或mutableCopy方法,都是浅拷贝!!! 是的,你没有听错. 所有系统容器类的copy或mutabl ...

  7. copy 和 mutableCopy的区别

    1.字符串拷贝 copy 浅拷贝,不拷贝对象本身,仅仅是拷贝指向对象的指针. NSString *str1 = @"qqq";NSString *str2 = [str1 copy ...

  8. 关于oc的学习笔记 -copy和mutableCopy

    简单点来说的话copy就是复制一个不可以变的类型,mutableCopy复制一个可变的对象 举例子 NSString *str = @"fikk"; NSMutableString ...

  9. Copy 与MutableCopy的区别

    NSString *string = @"origion"; NSString *stringCopy = [string copy]; NSMutableString *stri ...

最新文章

  1. deconv--反褶积和多项式除法
  2. ArrayUtils使用详解
  3. js实现对象完美克隆
  4. 浅谈Java锁,与JUC的常用类,集合安全类,常用辅助类,读写锁,阻塞队列,线程池,ForkJoin,volatile,单例模式不安全,CAS,各种锁
  5. svn之迁移代码技巧
  6. HDU2277_变色球
  7. java 获取插入数据的自增长id
  8. javax.servlet.ServletException: Circular view path []: would dispatch back to the current....
  9. 贪心法——区间覆盖问题
  10. spring test教程
  11. python程序开机自启动_Linux下Python脚本自启动和定时启动的详细步骤
  12. Nagios监控HP硬件状态
  13. 如何在 macOS 中将用户帐户拆分为两个单独的帐户?
  14. Linux文件系统管理
  15. 机器人操作系统——ROS,Robot Operating System
  16. [NOIp2017 TG Day1 T1] 小凯的疑惑
  17. 生成验证码易语言代码
  18. 二分算法:数的三次方根
  19. excel怎么合并同类项数据并求和(去除重复项)
  20. mysql simpleconsumer_SimpleMessageListenerContainer:Consumer raised exception

热门文章

  1. 如何设置夜览模式,减少 iPhone 上面的蓝光,减少眼睛的负担
  2. 应用程序无法正常启动(0xc0000142)。请单击‘确认’关闭应用程序
  3. 使用NNO区域进行色偏检测
  4. 计算机网络里的DHCP是什么,DHCP是什么意思?DHCP基础知识介绍
  5. 股份授权证明(DPOS)概述
  6. SPGridView 研究笔记 Part 1 - 基础和项菜单
  7. WPF 控件学习 之 容器控件
  8. 【6年开源路】海王星给你好看!FineUI v4.0正式版暨《FineUI3to4一键升级工具》发布!
  9. IOException parsing XML document from ServletContext resource
  10. 手机进水怎么办?3种补救措施要知道,既然已经发生就要减少损失