NSCoping和NSMutableCopying
首先,感谢博主写的博客,特写在最前面声明:
iOS中几个常用协议(一)NSCopying/NSMutableCopying)
iOS开发 拷贝之NSCoping与NSMutableCopying协议
系统非容器:(NSString,NSMutableString)
不可变对象:
NSCopying :浅拷贝(指针拷贝),引用计数器+1
NSMutableCopying:深拷贝(内容拷贝),重新开辟内存空间,指向新的地址;
可变对象:
NSCopying和NSMutableCopying均为深拷贝;
系统容器(NSArray,NSDictionary)
不可变对象:
copy:浅拷贝
NSMutableCopying:深拷贝;
可变对象:
copy和NSMutableCopying均为单层深拷贝;
简单点说:除了继承NSObject对象的不可变对象的Copy为浅拷贝;其他的均为深拷贝。
自定义类
1、属性拷贝方法:
1、@property 中使用copy,是对属性进行拷贝;优势防止外面数据更改,导致类
中属性更改;
2、对像下的属性可以也调用相应的`copyWithZone`或`mutableCopyWithZone`方法;
2、自定义对象
类的是实例拷贝,该类需要遵守 NSCopying 或 NSMutableCopying协议,实现
- (id)copyWithZone:(NSZone *)zone 或
- (id)mutableCopyWithZone:(nullable NSZone *)zone
3、类的对象拷贝(继承问题)
1 类直接继承自NSObject,无需调用[super copyWithZone:zone]
2 父类实现了copy协议,子类也实现了copy协议,子类需要调用[super
copyWithZone:zone]
3 父类没有实现copy协议,子类实现了copy协议,子类无需调用[super
copyWithZone:zone]
4、copyWithZone方法中要调用[[[self class] alloc] init]来分配内存
[self class]因为可能指向子类;
其他文献:
[OC高效系列]理解NSCopying协议](http://www.jianshu.com/p/4b4f75dd11ec)