首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Objective-C中复制对象

如何在Objective-C中复制对象
EN

Stack Overflow用户
提问于 2009-09-22 11:47:41
回答 3查看 116.1K关注 0票数 113

我需要深度复制一个自定义对象,该对象有自己的对象。我一直在阅读,对于如何继承NSCopying和如何使用NSCopyObject感到有点困惑。

EN

回答 3

Stack Overflow用户

发布于 2014-04-11 07:00:36

我不知道这段代码和我的代码有什么不同,但我对这个解决方案有问题,所以我多读了一点,发现我们必须在返回对象之前设置它。我的意思是这样的:

代码语言:javascript
复制
#import <Foundation/Foundation.h>

@interface YourObject : NSObject <NSCopying>

@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSString *line;
@property (strong, nonatomic) NSMutableString *tags;
@property (strong, nonatomic) NSString *htmlSource;
@property (strong, nonatomic) NSMutableString *obj;

-(id) copyWithZone: (NSZone *) zone;

@end


@implementation YourObject


-(id) copyWithZone: (NSZone *) zone
{
    YourObject *copy = [[YourObject allocWithZone: zone] init];

    [copy setNombre: self.name];
    [copy setLinea: self.line];
    [copy setTags: self.tags];
    [copy setHtmlSource: self.htmlSource];

    return copy;
}

我添加了这个答案,因为我在这个问题上有很多问题,我不知道为什么会发生这种情况。我不知道有什么不同,但它对我很有效,也许对其他人也有用:)

票数 21
EN

Stack Overflow用户

发布于 2017-11-03 10:53:07

还可以使用->运算符进行复制。例如:

代码语言:javascript
复制
-(id)copyWithZone:(NSZone*)zone
{
    MYClass* copy = [MYClass new];
    copy->_property1 = self->_property1;
    ...
    copy->_propertyN = self->_propertyN;
    return copy;
}

这里的推理是,得到的复制对象应该反映原始对象的状态。".“操作符可能会引入副作用,因为这个函数调用getter,而getter又可能包含逻辑。

票数 0
EN

Stack Overflow用户

发布于 2020-10-25 14:21:56

这可能是不受欢迎的方式。但我是这样做的:

代码语言:javascript
复制
object1 = // object to copy

YourClass *object2 = [[YourClass alloc] init];
object2.property1 = object1.property1;
object2.property2 = object1.property2;
..
etc.

非常简单和直接。:P

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1459598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档