制作对象的唯一副本以放置在NSMutableArray中

时间:2011-11-21 15:35:27

标签: objective-c

我正在努力解决这个问题......

我正在创建一个新的NSMutableArray,如此

NSMutableArray *myArray = [NSMutableArray arrayWithObjects:[db getRandomCustomObject], [db GetRandomCustomObject], [db getRandomCustomObject], nil];

getRandomObject方法查看另一个数组抓取随机对象指针并将其放在myArray中。

我遇到的问题是它只是存储一个指针......所以如果myArray获得一个重复的randomObject,它们都有相同的内存地址位置。

我希望myArray中的所有对象都是他们自己的对象...而不是指向另一个数组中对象的指针。我希望他们都有自己独特的记忆位置。

我想也许在getRandomCustomObject方法中我需要在返回之前做一个copyWithZone或类似的事情?

任何人都可以提供完整的示例代码来执行我正在尝试的操作吗?我已经尝试过查看NSCopying协议并覆盖我的自定义对象的copyWithZone方法,但我无法弄清楚如何做到这一点(仍然是一个新的)

谢谢!

1 个答案:

答案 0 :(得分:1)

在您的对象上实施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