iOS如何让自己写的对象具有拷贝属性

如何让自己写的对象具有拷贝属性

1、对象要满足NSCopying协议

@interface Person : NSObject<NSCopying>

@property(nonatomic, strong)NSString *name;
@property(nonatomic, assign)NSInteger age;

@end

2、实现-(id)copyWithZone:(NSZone *)zone方法

-(id)copyWithZone:(NSZone *)zone{
    Person *person = [[Person alloc] init];
    if (person) {
        person.name = self.name;
        person.age = self.age;
    }
    return person;
}
image.png

同理
如果让自己的类具备mutableCopy方法,并且返回可变类型,必须遵守NSMutableCopying,并实现- (id)mutableCopyWithZone:(nullable NSZone *)zone。

注意:
再此说的copy对应不可变类型和mutableCopy对应可变类型方法,都是遵从系统规则而已。如果你想实现自己的规则,也是可以的。

新建Person对象,进行copy操作,如果遵循不NSCopying协议,不实现协议方法,会报错,但是运行会crash

报错
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Person copyWithZone:]: unrecognized selector sent to instance 0x600000cd2740'
terminating with uncaught exception of type NSException

image.png

参考

黄增松的技术博客

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

相关阅读更多精彩内容

  • iOS中拷贝的目的在于和源数据互不影响,修改源数据不会影响拷贝出来的对象,同样修改拷贝出来的对象也不会影响到源数据...
    Good_Citizen阅读 560评论 0 4
  • 前言## NSObject类提供了copy和mutableCopy方法,通过这两个方法即可复制已有对象的副本,本文...
    棒棒德阅读 469评论 0 0
  • 1、系统对象的复制 不管是集合类对象,还是非集合类对象,接收到copy和mutableCopy消息时,都遵循以下准...
    Dwyane_Coding阅读 682评论 0 18
  • 原型模式的定义 “使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象”。最初的定义出现于《设计模式》(...
    luonaerduo阅读 621评论 1 0
  • 本文为转载: 作者:zyydeveloper 链接:http://www.jianshu.com/p/5f776a...
    Buddha_like阅读 1,002评论 0 2

友情链接更多精彩内容