iOS深拷贝和浅拷贝

深浅拷贝

浅拷贝:指针拷贝,指针增加一份,内容不变,原有内容retainCount加1
深拷贝:内容拷贝,指针内容都增加一份,原有内容retainCount不变

对于非容器类不可变对象

方法复制类型结果可变性
copy指针复制immutable
mutableCopy内容复制mutable
copyWithZone:指针复制immutable
mutableCopyWithZone:内容复制mutable

对于非容器类可变对象

方法复制类型结果可变性
copy内容复制immutable
mutableCopy内容复制mutable
copyWithZone:内容复制immutable
mutableCopyWithZone:内容复制mutable

对于容器类对象

方法复制类型-复制层级及可变性结果可变性
copy指针复制 - 1层immutable
mutableCopy内容复制 - 1层mutable
copyWithZone:指针复制 - 所有层immutable
mutableCopyWithZone:指针复制 - 所有层mutable
initWithArray:(NSArray*)array copyItems:(BOOL)flag 当flag=NO指针复制 - 所有层级, 所有层级可变性不变结果根据创建
initWithArray:(NSArray*)array copyItems:(BOOL)flag 当flag=YES内容复制 - 1层,第二层为immutable,其他层级可变性不变结果根据创建
Archiving and unarchiving内容复制-所有层,可变性不变二进制文件

NSDictionary 和 NSSet 的 initWithXXX CopyItems: 方法结果同NSArray的一样

当使用 initWithArray:copyItems: 和 Archiving,unarchiving时候,被复制的对象要实现 copying 或 mutableCopying 协议才能被相应的复制,否则会产生异常. 而且对自建对象的拷贝结果也依赖于自建对象对copying或mutableCopying协议的实现.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值