深浅拷贝

拷贝

含义:就是复制粘贴的意思。

深拷贝:相当于把源文件拷贝一份,两者互不干扰。新对象计数器置为1,源对象计数器不变。

浅拷贝:把源文件的快捷方式拷贝一份,源文件删除了,快捷方式(浅拷贝)就不能用了,源对象计数器+1。

 系统自带深拷贝方法:

 (1)数组:- (instancetype)initWithArray:(NSArray<ObjectType> *)array copyItems:(BOOL)flag

 

 (2)字典:- (instancetype)initWithDictionary:(NSDictionary<KeyType, ObjectType> *)otherDictionary copyItems:(BOOL)flag

 

copy和mutableCopy 拷贝的理解

 不可变对象 copy -> 不可变对象 -> 不管用可变或者不可变类型接收 都是不可变

字面理解:不可变对象copy成不可变对象之后 不管用可变或者不可变类型接收 都是不可变 

 可变对象   copy -> 不可变对象 -> 不管用可变或者不可变类型接收 都是不可变

字面理解:可变对象copy成不可变对象之后 不管用可变或者不可变类型接收 都是不可变 

下同: 

 

 不可变对象 mutableCopy -> 可变对象 ->不可变对象接收 -> 不可变对象

 不可变对象 mutableCopy -> 可变对象 ->可变对象接收 -> 可变对象

 

 可变对象   mutableCopy -> 可变对象 ->不可变对象接收 -> 不可变对象

 可变对象 mutableCopy -> 可变对象 ->可变对象接收 -> 可变对象

 

注意:

1、只要使用copy就是不可变对象

 @property (nonatomic, copy) NSMutableArray *list;

 在声明可变数组的属性的时候 只要使用copy这个关键字 就会变成 不变的数组

 原因:在setter的实现中 全部都使用了copy

 - (void)setList:(NSMutableArray *)list{

  _list = [list copy];

 }

 2、使用mutableCopy 必须使用 可变类型接收 才是可变对象

 自定义拷贝:

必须遵守拷贝协议(数组、字典、字符串)都遵守copy协议

1、自定义拷贝首先导入拷贝协议,<NSCopying,NSMutableCopying>

2、实现协议方法

 

博主水平有限,有错误请大牛们指出

推荐博客:http://blog.csdn.net/daiyelang/article/details/18730303

posted @ 2016-04-05 18:57  ALO羗子  阅读(190)  评论(0编辑  收藏  举报