object中的深浅拷贝

本文探讨了Objective-C中对象的深拷贝与浅拷贝,包括mutableCopy与copy方法的区别及应用。对于不同类型的对象,如何正确使用这些方法进行拷贝,特别是对于实现了NSCopying或NSMutableCopying协议的对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天重新温习了一下object中的copy,并做了几个例子验证,发现有些跟网上说的不太一样,未免再被误导,特此记录一下。


object中包含深拷贝与浅拷贝,即mutableCopy和copy。

简单记一下结论:

一个对象能用copy方法,需要实现NSCopying的协议,大部分的不可变对象,仍然是同一指针,计数加一,copy与retain效果相同。例如NSDictionary、NSDate、NSData、NSNumber等等,它们的协议实现类似于:


      1. -(id) copyWithZone: (NSZone*) zone
      2. {
      3.     return [self retain];
      4. }

要向一个对象发mutableCopy消息,必须实现NSMutableCopying协议。


对一些非容器类(字典,NSArray等)的实例时,发送mutableCopy消息,可创建一个新的对象。

而对一些容器类的实例,可变容器+copy,产生一个不可变容器,不可变容器+mutable,产生一个可变容器。



property中的copy关键字应该不是mutalblecopy








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值