示例解释深拷贝和浅拷贝IOS


--------------转载请注明源地址:http://blog.csdn.net/u013082522/article/details/19932977

最近了解到了一些深拷贝和浅拷贝的区别.

整理如下:

比如我们创建了一个Person类,有name(NSString类型)以及age(int类型)两个属性.

好了.现在我们先实例化一个Person对象.并给他一个初始值/

Person *p1 =[ [Person alloc]init];

[p1 setName:@"XuKunHenWuLiao"];

[p1 setAge:18];

需求出现了.我们需要对p1进行(copy)操作.

浅拷贝:p2 = [p1 copy];p2的age是新生成的18,但是name却是指向与p1.name相同的内存区.

深拷贝:p2 = [p1 copy];p2的age和name都与p1的name指向的内存地址不同;

总结来说:

浅拷贝(影子克隆):只复制对象的基本类型,对象类型,仍属于原来的引用.
深拷贝(深度克隆):不仅复制对象的基本类,同时也复制原对象中的对象.就是说完全是新对象产生的.

遵循NSCoping协议的类才可以使用深拷贝.

如果一个我们自定义的类,也就是复杂的类,若想使用深拷贝,我们就需要让我们的类,实现NSCoping协议,而且需要重写协议中的方法.

@protocol NSCopying

- (id)copyWithZone:(NSZone *)zone;

@end

@protocol NSMutableCopying

- (id)mutableCopyWithZone:(NSZone *)zone;

@end


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值