使自定义的类具有copy功能

首先,当对象需要调用 copy 的时候,需要遵守遵守 NSCopying 协议 和 调用 copyWithZone:这个方法

@interface Dog : NSObject
/** 姓名 */
@property (nonatomic, copy) NSString *name;
/** 年龄 */
@property (nonatomic, assign) int age;

@end


// 需要遵守 NSCopying 协议
@interface Dog () <NSCopying>

@end

@implementation Dog
// 当对象需要调用 copy 的时候,需要调用 copyWithZone:这个方法
- (id)copyWithZone:(NSZone *)zone
{
    Dog *dog = [[Dog allocWithZone:zone] init];
    dog.name = self.name;
    dog.age  = self.age;
    return dog;
}
@end
Dog *dog = [[Dog alloc] init]; // [object copyWithZone:zone]
dog.name = @"huahua";
dog.age  = 1;
Dog *newDog = [dog copy]; // 产生新对象【深拷贝】
NSLog(@"%@ %@",dog,newDog);
NSLog(@"%@ %@",dog.name,newDog.name);```

当自定义对象调用copy的时候属于深拷贝.
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 为什么很多内置类如UITableView的delegate属性都是assign而不是retain? 所有的引用计数...
    烟雨平生花飞舞阅读 1,213评论 0 3
  • 本文为转载: 作者:zyydeveloper 链接:http://www.jianshu.com/p/5f776a...
    Buddha_like阅读 914评论 0 2
  • 前言 不敢说覆盖OC中所有copy的知识点,但最起码是目前最全的最新的一篇关于 copy的技术文档了。后续发现有新...
    zyydeveloper阅读 3,421评论 4 35
  • 阴霾已久的天空终于放晴了,发霉了的心情也该拿出来晾晒了。太阳都露出了笑脸,自己也不该紧锁眉间了,不要相信那些个此岸...
    敏子慧慧阅读 213评论 0 0
  • 五年的时间,好快好快,一眨眼就过去了,你的爱也跟着消失了。五年的时间,好慢好慢,距离一辈子还很远,你的爱却不随行了...
    红刺猬阅读 187评论 0 0