深拷贝和 浅拷贝的概念
首先在谈论iOS深拷贝和浅拷贝之前先给出对应概念
深拷贝 :浅拷贝并不拷贝对象本身,只是对指向对象的指针进行拷贝
浅拷贝 :直接拷贝对象到内存中一块区域,然后把新对象的指针指向这块内存
一个小小的注意事项
在iOS中并不是所有对象都支持Copy和MutableCopy,遵循NSCopying协议的类可以发送Copy协议,遵循NSMutableCopying协议的类可以发送MutableCopy消息。如果一个对象没有遵循这两个协议而发送Copy或者MutableCopy消息那么会发生异常。
同时如果要遵循NSCopying协议,那么必须实现copyWithZone方法。如果要遵循NSMutableCopying协议那么必须实现mutableCopyWithZone方法。
可变对象和不可变对象分别调用Copy和MutableCopy方法的区别
非集合类对象
分别调用 copy 和 mutableCopy 方法 如下
NSString *str = @"4065";
NSString *strCopy = [str copy];
NSMutableString *mustr = [str copy];
NSMutableString *muCopy = [str mutableCopy];
[mustr appendString:@"is hanhan"]; //会直接崩溃 (copy和mutableCopy的区别在于copy在复制对象的时候其实是返回了一个不可变对象,因此当调用方)
[muCopy appendString:@"is hanhan"];
NSLog(@"str = %@ strCopy = %@ mus