使物体的唯一副本的NSMutableArray
问题描述:
我与这个有点挣扎的地方......使物体的唯一副本的NSMutableArray
我创建一个新的NSMutableArray像这样
NSMutableArray *myArray = [NSMutableArray arrayWithObjects:[db getRandomCustomObject], [db GetRandomCustomObject], [db getRandomCustomObject], nil];
的getRandomObject方法着眼于另一个数组抓取一个随机的对象指针并将其放在myArray中。
我遇到的问题是它只是存储一个指针......所以如果myArray获取重复的randomObject,它们都具有相同的内存地址位置。
我希望myArray中的所有对象都是它们自己的对象......而不是指向另一个数组中的对象的指针。我希望他们都有自己独特的记忆位置。
我在想也许在getRandomCustomObject方法我需要做一个copyWithZone或类似的东西在返回之前?
任何人都可以提供我完整的示例代码来做我想要的吗?我试着寻找NSCopying协议,并覆盖copyWithZone方法为我的自定义对象,但我不知道如何做到这一点(仍然是一个新手)
谢谢!
答
对你的对象实施NSCopying
协议,然后使用复制方法,然后在getRandomCustomObject
的方法内。
接口:
@interface SomeBaseObject : NSObject <NSCopying>{
int _someInt;
NSString* _someString;
}
@property(nonatomic, assign)int someInt;
@property(nonatomic, copy)NSString* someString;
@end
和实施:
@implementation SomeBaseObject
@synthesize
someInt = _someInt,
someString = _someString;
-(id)init{
self = [super init];
if(self){
self.someInt = -1; //or any other value you need here
self.someString = nil;
}
return self;
}
-(id)copyWithZone:(NSZone *)zone{
SomeBaseObject* copy = [[[self class] allocWithZone:zone]init];
copy.someInt= self.someInt;
copy.someString = self.someString
return copy;
}
@end
是的,我认为这就是我可能要做。但我需要关于如何做到这一点的示例代码。我无法从文档中找出它 – sayguh
它不像看起来那么可怕:) 我会编辑我的答案以添加一些简单的代码 – Ariel
完美,非常感谢 – sayguh