美文网首页
对象的复制

对象的复制

作者: 一杯清茶一片雪 | 来源:发表于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]。

    相关文章

      网友评论

          本文标题:对象的复制

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