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标签的属性在初始化后就不可以调用方法修改(可以重新赋值)
如图所示,程序编译出现了错误。