如何执行Objective-C深层复制

时间:2014-04-01 06:35:54

标签: ios objective-c cloning

Objective-c复制方法是否执行对象的深层复制

NSObject *clone = [self copy];

2 个答案:

答案 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