Должен ли я использовать @property (retain) для сохранителя свойства @dynamic? - PullRequest
2 голосов
/ 05 октября 2010

У меня есть следующий код для свойства, чей метод get / setter я пишу вручную, используя ключевое слово @dynamic:

@property (nonatomic, retain) NSObject* obj;

@dynamic obj;
-(NSObject*) obj
{
    return obj;
}
-(void) setObj:(NSObject*)newObj
{
    [obj release];
    obj = [newObj retain];
}

Мой вопрос: если я удалю сохранение из объявления @property, компиляторжалуется, что по умолчанию будет назначено и что это может быть не то, что я хочу.Если я добавлю сохранение, я предполагаю, что оно будет проигнорировано, потому что я сам написал геттеры / сеттеры?

Просто ищу быстрое подтверждение этого.

Ответы [ 2 ]

3 голосов
/ 05 октября 2010

Вы правы, но декларация вашего свойства так же важна для документации, как и для вашей реализации, по крайней мере, в этом случае.В какой-то момент кто-то (вы через шесть месяцев?) Посмотрит на ваш файл .h и скажет: «Почему это значение не сохраняется?

0 голосов
/ 05 октября 2010

Сохранение позволяет вашему объекту оставаться выделенным в памяти до тех пор, пока вы не примените

[obj release];

, поэтому даже если у вас есть свой собственный установщик и получатель, вам нужно сохранить удержание, чтобы сохранить свое место в памяти, потому чтов конце концов, у вас есть только указатель на эту позицию, и поэтому компилятор сообщает вам, что вы можете изменить другой объект или то, что когда-либо заняло место вашего объекта.

И важно, чтобы вы сделали релиз, чтобы освободить память, когда вы закончите его использовать.

...