知识小结二:NSCoping和NSMutableCopying

NSCoping和NSMutableCopying

首先,感谢博主写的博客,特写在最前面声明:

iOS中几个常用协议(一)NSCopying/NSMutableCopying)

iOS 之深浅拷贝 Copy

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)

你可能感兴趣的:(知识小结二:NSCoping和NSMutableCopying)