Это зависит от того, какой атрибут вы задали для своего свойства: retain
, assign
или copy
.
@property (retain) NSString *tempStr
: будет выпущено старое значение (желтый цвет) иновое значение (красный цвет) будет сохранено.Единственное исключение - когда yellowcolor == redcolor
.Тогда ничего не произойдет, потому что старые и новые значения совпадают. @property (assign) NSString *tempStr
: не будет никаких операций отпускания / сохранения.Это равносильно изменению только указателя.Таким образом, после этих операций желтый цвет не будет выпущен, и вы потеряете ссылку на него (если в вашем коде нет другой ссылки на него).Таким образом, это может вызвать утечку памяти. @property (copy) NSString *tempStr
: это похоже на retain
, но оно вызывает copy
для нового значения вместо просто retain
, так что это создаст дублированный объект вобъем памяти.С учетом NSString он равен retain
, поскольку NSString является неизменным, поэтому создавать дубликаты не нужно.
Некоторые примеры кода можно найти здесь .
EDIT : Как упоминалось @Bavarious, copy
равно retain
, только если вы инициализируете это свойство с NSString
.Это не будет равно, если вы инициализируете его с NSMutableString
, потому что это изменчивое, поэтому будет сделана «правильная» копия.