gpt4 book ai didi

objective-c - 如何复制自定义的 Objective-C 对象?

转载 作者:行者123 更新时间:2023-12-04 05:30:01 26 4
gpt4 key购买 nike

我有一个类(class),比如说 Person 类(class)。在类里面我有几个 NSMutableArrays。

@property NSMutableArray *arrayOne;
@property NSMutableArray *arrayTwo;
...

现在我想复制那个类,这样我就可以从函数中返回它并使用副本并更改它的数据。我想在内存中拥有对象的新副本,而不是对同一地址的另一个引用。

为此,我在 Person.m 中实现了这一点:
-(id)copyWithZone:(NSZone *)zone
{
Person *copy = [[Person allocWithZone:zone] init;
copy.arrayOne = [NSMutableArray arrayWithArray:self.arrayOne];
copy.arrayTwo = [NSMutableArray arrayWithArray:self.arrayTwo];
...

return copy;
}

到目前为止,这就像我想要的那样工作,但是当我尝试对副本的数组进行排序时,出现错误:
-[__NSArrayI sortUsingSelector:]: 无法识别的选择器发送到实例 0x100108a30

我注意到原始数组的类型是“_NSArrayM”,但副本是“_NSArrayI”...

那我做错了什么?我听说过使用 NSArchiver 和 NSUnarchiver 进行深度复制......我必须使用它吗?抱歉,我对 C 和 Objective-C 还很陌生... :D

我希望你能帮我解决这个问题。 =)

对不起我的'学校英语'....

干杯,
尼克

编辑:数组由 NSString 对象组成,所以我可以使用
sortUsingSelector:@selector(caseInsensitiveCompare:)

对数组进行排序。

最佳答案

你的可变数组属性是如何在你的头文件中声明的?

// Wrong
@property (copy) NSMutableArray *array;
@property (assign) NSMutableArray *array;

// Right
@property (strong) NSMutableArray *array;

注意如果你只是在做
@property NSMutableArray *array;

那么我很惊讶你的代码已经走了这么远:) 默认的属性内存语义是 assign - 这根本不会告诉 ARC 以任何方式保留您的数组:) 您需要指定 strong .

关于objective-c - 如何复制自定义的 Objective-C 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12764673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com