理解NSCopying协议

使用对象时经常需要拷贝它,如果想令自己的的类支持拷贝操作,那么就要实现NSCopying协议,该协议只有一个方法:

-(id)copyWithZone:(NSZone*)zone

为何会出现NSZone呢,以前开发程序时,会据此把内存分为不同的区,而对象会创建在某个区里面。现在不用了,每个程序只有一个区:默认区(default zone)。所以说,尽管必须实现这个方法,但不必担心zone参数。

当对象调用copy方法时候,其实是调用这个协议方法!重写NSCopying方法里面可以做一些其他操作。另外拷贝的话不管属性还是实例变量都有以拷贝过来,不能共用。通常在该方法里,我们会调用下全能初始化方法来生产一个新对象,但有时候如果初始化方法可能要设置一个复杂的内部数据结构,可是在拷贝后的对象中,这个数据结构立刻要用其他数据来复写,所以没必要在设置一遍。

对应的copy的协议还有一个NSMutableCopying协议。用于返回可变的对象。如果在可变对象上调用copy协议方法,返回的就是不可变对象。

NSCopying和NSMutableCopying协议可以同时实现

如果你所写的对象需要深拷贝,那么可考虑新增一个专门执行深拷贝的方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容