-
首先NSObject中声明了两个方法copy和mutableCopy,所以继承自NSObject的对象都可以调用。
-
如果想调用copy和mutableCopy必须实现NSCopying和NSMutableCopying协议,NSObject中只有声明并没有实现,所以如果自定义的类型调用copy会报unRecogniseSelector(copyWithZone),因为需要自己实现。
-
大部分框架类都默认实现了NSCopying协议和NSMutableCopying协议,例如NSString、NSArray、NSDictionary等等,所以可以直接使用方法,不同方法的区别可以看这里
1.非容器类的copy这里讨论过了oc中的copy和mutableCopy。
2.容器类对象的copy也遵循上面的规则,不过只会进行单层深拷贝,容器类的内容不会进行拷贝。如果想进行双层深拷贝的话,需要[[NSArray alloc] initWithArray:testArr copyItems:YES];
3.自定义类型的copy,自己实现NSCopying和NSMutableCopying方法。灵活程度还是很大的
网友评论