NSCopying的理解

作者: makemake | 来源:发表于2017-11-05 20:32 被阅读40次

想要让自己写的对象具有copy功能,需要实现NSCopying协议。copy分深拷贝与浅拷贝,深拷贝可以理解为:在拷贝自身的时候,把底层的数据也复制出去。浅拷贝拷贝之后的对象实际上是跟原对象同一地址。(Foundation框架中的所有collection类在默认情况下都执行浅拷贝)

所以NSMutableArray最简单的初始化方法可以这样写:

NSMutableArray *array = [@[] mutableCopy];

要覆写copy方法,其实真正需要实现的是copyWithZone:,所以想要让自己写的对象支持copy功能,只需要声明model遵从NSCopying协议,并实现该方法。
<NSCopying> 协议中只有一个方法:

- (id)copyWithZone:(NSZone *)zone

其中的zone参数在以前开发时内存会分为不同的zone,对象创建在zone里面,但是现在只有一个default zone,所以并不需要管这个参数。

这是我在开发中深拷贝的一个使用场景:

self.interimModel = self.currentModel;

这一句代码是将currentModel赋值给interimModel,其实本质上是currentModel的指针地址丢给了interimModel,在操作interimModel内部的值的时候currentMode的值也会跟着改变。若是需求只需要改变interimModel的值,这时候可以使用深拷贝解决。

代码如下:
<NSCopying>

- (id)copyWithZone:(NSZone *)zone{
    WSTColorModel *model = [[WSTColorModel allocWithZone:zone]init];
    model.modelName = self.modelName;
    model.name= self.name;
    model.h= self.h;
    return model;
}

self.interimModel = [self.currentModel copy];

相关文章

  • NSCopying的理解

    想要让自己写的对象具有copy功能,需要实现NSCopying协议。copy分深拷贝与浅拷贝,深拷贝可以理解为:在...

  • 理解NSCopying协议

    1.哪些具体的代码用到了NSCopying协议呢? 以NSArray为例: 具体解释: 2.进一步了解NSCopy...

  • 理解NSCopying协议

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

  • 《Effective Objective-C 2.0 》 阅读笔

    第22条:理解NSCopying协议 1. NSCopying协议 如果想令自己的类支持拷贝操作,必须实现NSCo...

  • 22: 理解NSCopying协议

    1.NSCopying协议 若想令自定义对象具有拷贝功能,则需要实现NSCopying协议 实现copyWithZ...

  • 理解NSCopying--Effective笔记

    1,若想令自己所写的对象具有拷贝功能,则需实现NSCopying协议-(id)copyWithZone:(NSZo...

  • 第22条:理解NSCopying协议

    使某个类支持拷贝功能,只需声明该类遵从NSCopying协议,并且实现copyWithZone方法即可。 通常情况...

  • NSCopying

    定义:NSCoping协议声明了一种提供对象副本的方法。复制的确切含义类类而异,但是复制必须是功能独立的对象,其值...

  • 《编写高质量iOS与OS X代码的52个有效方法》22-27

    第22条:理解NSCopying协议 NSZone是以前开发程序时,会据此把内存分成不同的区(zone),而对象会...

  • 让自己创建的类具备Copy功能

    对于对象具有拷贝功能,则需实现 NSCopying 协议。 声明该类遵从 NSCopying 协议 实现 NSCo...

网友评论

    本文标题:NSCopying的理解

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