iphone @property - PullRequest
       17

iphone @property

2 голосов
/ 07 января 2010

В чем разница между этими двумя?

@property (nonatomic, retain)
@property (nonatomic, copy)

Что это за другой тип?

Ответы [ 4 ]

6 голосов
/ 07 января 2010

Использование retain эквивалентно этому методу:

- (void)setMyObject:(id)object {
    myObject = [object retain];
}

Использование copy выглядит так:

- (void)setMyObject:(id)object {
    myObject = [object copy];
}

Основное отличие состоит в том, что теперь существует две копии одного и того же объекта. Теперь, если вы измените переменную экземпляра в своем классе (например, изменив @"A" на @"B"), исходный объект останется нетронутым (он все равно будет @"A").

0 голосов
/ 09 декабря 2011

Для атрибутов, тип которых является классом неизменяемых значений, который соответствует протоколу NSCopying, вы почти всегда должны указывать **

копия

** в вашей декларации @property. Указывая **

1010 * сохранить *

** - это то, чего вы почти никогда не хотите в такой ситуации.

Поскольку почти во всех случаях вы хотите предотвратить изменение атрибутов объекта за его спиной, вы должны пометить свойства, представляющие их копию. (И если вы пишете установщик самостоятельно, а не используете @synthesize, вы должны помнить, что нужно использовать копию вместо того, чтобы сохранять ее.)

0 голосов
/ 07 января 2010

Как правило, используйте:

@property(nonatomic, copy)

.. для свойств NSString и это для всех других свойств объекта:

@property(nonatomic, retain)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...