Objective-c复制方法是否执行对象的深层复制?
NSObject *clone = [self copy];
答案 0 :(得分:3)
NSObject *clone = [self copy];
不要执行深层复制,但会是浅层复制。
您需要像这样实施NSCopying协议
//ContactCard.h
@interface ContactCard : NSObject<NSCopying>
{
NSString* name;
NSString* email;
}
...
-(id)copyWithZone:(NSZone *)zone;
@end
//ContactCard.m
@implementation ContactCard
...
-(id)copyWithZone:(NSZone *)zone
{
ContactCard* cc = [[ContactCard allocWithZone:zone]init];
cc->email = [email copy];
cc->name = [name copy];
return cc;
}
...
@end
您可以在enter link description here上阅读更多内容 或者在NSCopying上引用Apple docs
答案 1 :(得分:-3)
这可能会有所帮助。对于任何自定义对象的深层副本,我们需要在该类中采用NSCopying协议。 How to copy an object in objective c