首先,当对象需要调用 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的时候属于深拷贝.