我正在努力解决这个问题......
我正在创建一个新的NSMutableArray,如此
NSMutableArray *myArray = [NSMutableArray arrayWithObjects:[db getRandomCustomObject], [db GetRandomCustomObject], [db getRandomCustomObject], nil];
getRandomObject方法查看另一个数组抓取随机对象指针并将其放在myArray中。
我遇到的问题是它只是存储一个指针......所以如果myArray获得一个重复的randomObject,它们都有相同的内存地址位置。
我希望myArray中的所有对象都是他们自己的对象...而不是指向另一个数组中对象的指针。我希望他们都有自己独特的记忆位置。
我想也许在getRandomCustomObject方法中我需要在返回之前做一个copyWithZone或类似的事情?
任何人都可以提供完整的示例代码来执行我正在尝试的操作吗?我已经尝试过查看NSCopying协议并覆盖我的自定义对象的copyWithZone方法,但我无法弄清楚如何做到这一点(仍然是一个新的)
谢谢!
答案 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