Это вопрос предпочтения / соглашения для некоторых.По умолчанию выполнение:
@property (assign) NSString * myString;
... с последующим:
@synthesize myString;
... даст вам три вещи.Вы получаете метод setter, к которому можно получить доступ как self.myString = @"newValue"
или [self setMyString:@"newValue"]
, метод getter, к которому можно получить доступ как NSString* temp = self.myString
или NSString* temp = [self myString]
, и переменную экземпляра с именем myString
, к которой можно обращаться непосредственно внутри вашегокласс (то есть без прохождения через метод получения и установки) и используется для установки и получения значения свойства, а также для внутреннего использования для поддержки свойства.
Если вам нравится, вы можете сделать @synthesize myString = someOtherVarName
, а затем выпо-прежнему получают сеттеры и геттеры, как и раньше, но вместо переменной экземпляра myString
переменная экземпляра someOtherVarName
используется для возврата свойства, и переменная myString
не создается.
Так почему жеиспользовать более подробный синтаксис?Ни в одном случае не требуется, чтобы вы это делали, но некоторые люди предпочитают делать это при работе со свойствами, которые объявлены retain
или copy
.Причиной этого является то, что установка свойства, объявленного retain
или copy
через его сгенерированный метод установки, будет влиять на счет удержания объекта, который устанавливается / сбрасывается.Делать то же самое, напрямую обращаясь к переменной экземпляра, не удастся.
Таким образом, присваивая переменную экземпляра чему-то другому, вы можете сделать различие в коде по строкам «все, что делает xxx.myString = Y
, изменяет счетчик сохранения, тогда как все, что делает someOtherVarName = Y
, не является».Опять же, это не обязательно делать, но некоторые люди предпочитают.