美文网首页
对象的复制

对象的复制

作者: 一杯清茶一片雪 | 来源:发表于2020-04-09 00:11 被阅读0次

只复制对象的指针称为浅复制;复制具有新的内存空间的对象则称为深复制

NSObject中有copy方法,它能够通过复制接收器来生成新实例。但是,实际的复制操作并不是由copy完成的,而是由实例方法copyWithZone:完成的。发送copy消息给实例对象后,指定参数为NULL,这样就可以调用自身的copyWithZone:。该方法就是这样生成新的实例的。

copyWithZone:是在协议NSCopying中声明的:
@protocol NSCopying
-(id)copyWithZone:(nullable NSZone *)zone;
@end

NSCopying协议在头文件Foundation/NSObject.h中定义,但是NSObject自己并不采用该协议。
因此,为了使实例能够复制,就需要在类中采用NSCopying协议,并实现copyWithZone:方法。

-(id)copyWithZone:(NSZone *)zone {
YYImageFrame *frame = [self.class new];
frame.index = _index;
frame.width = _width;
frame.height = _height;
frame.offsetX = _offsetX;
frame.offsetY = _offsetY;
frame.duration = _duration;
frame.dispose = _dispose;
frame.blend = _blend;
frame.image = _image.copy;
return frame;
}
考虑到继承的原因,使子类调用[super copyWithZone:zone];能够返回子类的实例,所以不建议写[类名 new],而是使用[self class]。

相关文章

  • Copy

    copy 复制 浅复制:指针的复制(地址的复制) 深复制:对象内容的复制 Foundion的基本对象复制 基本对象...

  • iOS面试题:浅复制和深复制的区别?

    浅层复制:只复制指向对象的指针,而不复制引用对象本身。深层复制:复制引用对象本身。意思就是说我有个 A 对象,复制...

  • iOS常见面试题

    1、浅复制和深复制的区别 浅层复制:只复制指向对象的指针,而不复制引用对象本身。 深层复制:复制引用对象本身。 意...

  • objective深浅拷贝

    浅复制和深复制的区别? 浅复制:只复制指向对象的指针,而不复制引用对象本身。 深复制:复制引用对象本身。 意思就是...

  • 复制引用和复制对象的区别

    复制引用和复制对象的区别 复制引用:是指将某个对象的地址复制,所以复制后的对象副本的地址和源对象相同,这样,当改变...

  • JS中的深浅复制

    什么是深浅复制? 深复制:把要复制的对象的所引用的全部对象都复制一遍。开辟新空间。 浅复制:仅仅复制对象的引用,而...

  • 原生JavaScript对象复制

    简单深度复制 对象合并或者称为浅复制(对象只是复制应用,原对象改变会影响新对象,新对象改变不会影响原来的对象) 高...

  • 深入浅出深度复制与浅度复制(demo)

    深度复制:复制一个对象时并且复制了该对象的引用(引用的引用。。。)。 浅度复制:仅仅复制该对象的成员变量(基本类型...

  • Java随笔 - 对象克隆

    本文总结Java对象的浅复制和深复制,以及Clonable接口。 前言 对象在传递的时候,会进行对象复制。对象的复...

  • JavaScript对象的深浅复制

    前言 从层次上来看,对象的复制可以简单地分为浅复制和深复制,顾名思义,浅复制是指只复制一层对象的属性,不会复制对象...

网友评论

      本文标题:对象的复制

      本文链接:https://www.haomeiwen.com/subject/aemfmhtx.html