Objective-C NS对象 copy 方法总结

2018-06-19  本文已影响0人  微笑惊世骇俗

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"];

上一篇下一篇

猜你喜欢

热点阅读