我需要深度复制一个自定义对象,该对象有自己的对象。我一直在阅读,对于如何继承NSCopying和如何使用NSCopyObject感到有点困惑。
发布于 2014-04-11 07:00:36
我不知道这段代码和我的代码有什么不同,但我对这个解决方案有问题,所以我多读了一点,发现我们必须在返回对象之前设置它。我的意思是这样的:
#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;
}
我添加了这个答案,因为我在这个问题上有很多问题,我不知道为什么会发生这种情况。我不知道有什么不同,但它对我很有效,也许对其他人也有用:)
发布于 2017-11-03 10:53:07
还可以使用->运算符进行复制。例如:
-(id)copyWithZone:(NSZone*)zone
{
MYClass* copy = [MYClass new];
copy->_property1 = self->_property1;
...
copy->_propertyN = self->_propertyN;
return copy;
}
这里的推理是,得到的复制对象应该反映原始对象的状态。".“操作符可能会引入副作用,因为这个函数调用getter,而getter又可能包含逻辑。
发布于 2020-10-25 14:21:56
这可能是不受欢迎的方式。但我是这样做的:
object1 = // object to copy
YourClass *object2 = [[YourClass alloc] init];
object2.property1 = object1.property1;
object2.property2 = object1.property2;
..
etc.
非常简单和直接。:P
https://stackoverflow.com/questions/1459598
复制相似问题