Objective-C 关于 copy 的使用

  • 参考链接
1. 使用 @property 声明 NString,NSArray,NSDictionary时需要使用copy,使用strong的问题
  • 因为NString,NSArray,NSDictionary都有自己对应的子类:NSMutableString,NSMutableArray,NSMutableDictionary,而父类指针可以指向子类对象,使用copy可以让本对象不受外界(子对象)影响,无论给我传入的是一个可变对象还是一个不可变对象,都能保证自身持有的是一个不可变副本
  • 使用strong时,如果这个属性指向一个可变对象,修改可变对象时,这个属性值也会被修改
2. block 使用copy
  • block使用copy是在MRC中延续下来的,在MRC下,方法内部的block是存放在栈区,使用copy会将block拷贝到堆区。
    在ARC下编译器会自动对block进行copy,因此我们使用copy或者strong的效果是一样的。但是我们在ARC下继续使用copy可以提醒我们编译器会自动帮我们实现copy的操作。
3. 深拷贝和浅拷贝
  • 深拷贝 : 内容的拷贝
  • 浅拷贝 : 地址的拷贝
NSString *string = @"123"; // 0x100003138
NSString *stringCopy = [string copy]; // 0x100003138
NSMutableString *mStringCopy = [string copy]; // 0x100003138
NSString *stringMCopy = [string mutableCopy]; // 0x100748c00
NSMutableString *mStringMCopy = [string mutableCopy]; // 0x100504080
NSMutableString *mString = [NSMutableString stringWithFormat:@"123"]; // 0x100604bc0
NSString *stringCopy = [mString copy]; // 0x33323135
NSMutableString *mStringCopy = [mString copy]; // 0x33323135
NSString *stringMCopy = [mString mutableCopy]; // 0x10047b0b0
NSMutableString *mStringMCopy = [mString mutableCopy]; // 0x1020395a0
  • 对于非集合对象
[immutableObject copy] 浅复制
[immutableObject mutableCopy] 深复制
[mutableObject copy] 深复制
[mutableObject mutableCopy] 深复制
NSArray *array = @[@1,@2,@3,@4]; // 0x100600180
NSArray *arrayCopy = [array copy]; // 0x10064e7f0
NSMutableArray *mArrayCopy = [array copy]; // 0x10041a4f0
NSArray *arrayMCopy = [array mutableCopy]; // 0x1004920d0
NSMutableArray *mArrayMCopy = [array mutableCopy]; // 0x100404300
NSMutableArray *mArray = [NSMutableArray arrayWithObjects:@1,@2,@3,@4, nil]; // 0x1005069a0
NSArray *arrayCopy = [mArray copy]; // 0x100494cc0
NSMutableArray *mArrayCopy = [mArray copy]; // 0x100601250
NSArray *arrayMCopy = [mArray mutableCopy]; // 0x100605f70
NSMutableArray *mArrayMCopy = [mArray mutableCopy]; // 0x10045c1b0
  • 对于集合对象
[immutableObject copy] 深复制
[immutableObject mutableCopy] 深复制
[mutableObject copy] 深复制
[mutableObject mutableCopy] 深复制

你可能感兴趣的:(Objective-C 关于 copy 的使用)