Objective-C NS对象 copy 方法总结

1. copy 返回的是不可变对象(immutableObject),即便原消息接收者是mutable对象,copy返回的也将是不可变对象(immutableObject)。

2. mutableCopy 返回的是可变对象(mutableObject)

例1:

NSString* string =[NSString stringWithString:@"This is Copy Demo."];

NSString* str1 = string;    // 地址与string相同

NSString* str2 = [string copy];  // 地址与string相同,并没有真正开辟新的内存空间,与强引用相同

NSString* str3 = [string mutableCopy]; // 地址与string不同,开辟新的内存空间存储字符串,返回类型是MutableString


例2:

        CopyTest* testObj = [CopyTestnew];

        NSMutableString* mstrTest = [NSMutableString stringWithString:@"Test Mutable String"];

        NSArray* array =@[@"String",@{@"Key":@"Value"},@(3), mstrTest];

        NSMutableArray* mutableArray = [NSMutableArrayarrayWithArray:array];

        testObj.marrInstanceCopy    = mutableArray;

        // 因为属性定义为(nonatomic, copy)所以会自动copy,但返回值是不可变对象所以这里进行改变对象值的操作(addObject:)会崩溃。(指针所指向对象的类型是__NSArrayI)

        [testObj.marrInstanceCopy addObject:@"Add Object"];

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

推荐阅读更多精彩内容

  • 本文为转载: 作者:zyydeveloper 链接:http://www.jianshu.com/p/5f776a...
    Buddha_like阅读 932评论 0 2
  • 1、对象拷贝有两种方式:浅复制和深复制。顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针;深复制是直接...
    滴答大阅读 790评论 0 2
  • 不知道怎么回事,陈铭总想调查王晓乐的死因,他总是觉得好像只有他自己知道似的。在他躺在床上思考的时候,听见了客...
    致帅传奇阅读 148评论 0 0
  • 今天是2017年9月4日,经历了8月31日的报到,寄宿一晚,和周六周日准备学校布置的相关东西,今天早上爸爸...
    不缠人的猫阅读 171评论 0 0
  • 在进行这些安装之前你需要先安装好CentOS6,并按照centos的yum配置这篇文章整理好yum源。 安装基础包...
    TarsL阅读 1,128评论 2 2