使物体的唯一副本的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 
+0

是的,我认为这就是我可能要做。但我需要关于如何做到这一点的示例代码。我无法从文档中找出它 – sayguh

+0

它不像看起来那么可怕:) 我会编辑我的答案以添加一些简单的代码 – Ariel

+0

完美,非常感谢 – sayguh