标签:
含义:就是复制粘贴的意思。
深拷贝:相当于把源文件拷贝一份,两者互不干扰。新对象计数器置为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
标签:
原文地址:http://www.cnblogs.com/adople/p/5356172.html