【问题标题】:How to perform a Objective-C deep copy [duplicate]如何执行 Objective-C 深拷贝 [重复]
【发布时间】:2014-04-01 06:35:54
【问题描述】:

Objective-c 复制方法是否对对象进行深度复制

NSObject *clone = [self copy];

【问题讨论】:

标签: ios objective-c cloning


【解决方案1】:
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

【讨论】:

  • 谢谢,我试试看。
  • 那不是深拷贝;它无法复制 ContactCard 的任何子类或它可能访问的任何外部资源(例如:此代码不会复制 AVAssetReader 对象的实例,而是复制指针 - 这是浅的,而不是深的)。答案严重不足。
【解决方案2】:

这可能会有所帮助。对于任何自定义对象的深拷贝,我们需要在该类中采用 NSCopying 协议。 How to copy an object in objective c

【讨论】:

    猜你喜欢
    • 2013-03-12
    • 2011-02-09
    • 2010-11-19
    • 2018-02-26
    • 2016-09-27
    • 2017-10-14
    • 1970-01-01
    • 2021-01-07
    • 2016-05-07
    相关资源
    最近更新 更多