对NSCopying协议的理解

1.  前言:我们经常需要对对象进行拷贝,在OC语言中通过copy方法完成。 如果想令自己的类支持拷贝操作,那就要实现NSCopying协议。

- (id)copyWithZone:(NSZone *)zone {}
这里的NSZone 是什么?  

解释:在以前的开发程序时,会据此把内存分成不同的“区”(zone),而对象会创建在某个区里面。

           现在每个程序只有一个区:“默认区”(default zone)。所以尽管必须实现这个方法,但我们不用关心zone里面的参数了。

注意:有些类对象中的数据结构,可能没有在初始化方法中设置好,就是说类对象中含有数组,需要另行设置,例如:数组: [_arr mutableCopy]; 如果不进行这个操作,那么多个拷贝过去的类实例共享这一块内存。

2. mutableCopy这个辅助方法与copy类似,需实现NSMutableCopy协议

- (id)mutableCopyWithZone:(NSZone *)zone

3. copy、immutableCopy、mutableCopy区别:

-[NSMutableArray copy] =>NSArray   -[NSArray mutableCopy]  =>NSMutableArray

    copy:copy所拷贝的对象于当前对象类型一致;

    immutableCopy:拷贝为不可变对象;

    mutableCopy:拷贝为可变对象;

4.  深拷贝和浅拷贝

      深拷贝:在拷贝的对象时,将其底层数据一并复制过去;

      浅拷贝:只拷贝容器对象本身,而不复制其中数据;

 

注意:遵循协议不代表拷贝为深拷贝,还需自己编写方法来做,在绝大多数的情况下,执行的都是浅拷贝。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值