Создание уникальных копий объектов для размещения в NSMutableArray - PullRequest
0 голосов
/ 21 ноября 2011

Я немного борюсь с этим ...

Я создаю новый NSMutableArray примерно так:

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

Метод getRandomObject просматривает другой массив, захватывает указатель на случайный объекти помещает его в myArray.

Проблема, с которой я столкнулся, заключается в том, что он просто хранит указатель ... поэтому, если myArray получает дубликат randomObject, они оба имеют одинаковое расположение в памяти.

Я хочу, чтобы все объекты в myArray были их собственными объектами ... а не указателями на объект в другом массиве.Я хочу, чтобы у них у всех была своя уникальная область памяти.

Я думаю, может быть, в методе getRandomCustomObject мне нужно сделать copyWithZone или что-то подобное перед возвратом?полный пример кода, чтобы сделать то, что я пытаюсь?Я пытался просмотреть протокол NSCopying и переопределить метод copyWithZone для своего пользовательского объекта, но не могу понять, как это сделать (все еще новичок)

Спасибо!

1 Ответ

1 голос
/ 21 ноября 2011

Реализация протокола 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...