复制方法原来这么有趣!——oc对象复制

copy和mutablecopy方法

copy与mutablecopy是oc里用来复制的两个方法,区别在于mutablecopy返回的是可修改的对象,而copy方法返回的是对象的不可修改的副本。

注意:即使原来的对象是不可修改的,通过mutablecopy方法复制出来的副本也是可以修改的

运行出来的结果是这样:

发现修改复制得到的副本对原字符串无影响

NScopying与NSMutableCopy协议

当调用复制方法的不再是字符串,而是对象时,就不能简单地直接调用copy或者mutableCopy了,要先在类中实现NSCopying和NSMutableCopy协议

注意:父类已经实现NSCopying协议的话,子类重写copyWithZone方法就需要先调用父类的copy方法复制继承父类得到的成员变量,然后对子类中定义的成员变量赋值

格式如下:

接下来用代码示范一下复制对象:

这段代码在复制对象的部分就定义了一个HUspy类,并且遵守并实现了NSMutbaleCopy协议,重写了mutableCopyWithZone方法,在主函数中,便可以调用方法将huanghun变量复制给aniya变量,修改aniya的值对huanghun没有影响

最后一个部分,还演示了浅复制的效果,深浅复制的内容在下一目讲解

浅复制与深复制

深浅复制就是复制的两种方式

浅复制

浅复制就是将类中作为指针的变量复制给了新的指针,因此改变这个量时,原来的和新的变量都会发生改变

深复制

用代码来演示一下:

setter方法的复制选项

在合成存取方式时,有一个标签是copy,这里这个标签其实就代表着在调用setter方法赋值时,是通过copy方法赋值给属性的。也就意味着,带有copy标签的属性在初始化后就不可以调用方法修改(可以重新赋值)

如图所示,程序编译出现了错误。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值