Обычно я не объявляю ivar, и пусть это делается через @property. Однако в операторе @synthesize я указываю имя ивара для использования в реализации:
@interface MyClass
@property (weak) NSString* myString;
@end
@implementation MyClass
@synthesize myString = _myString;
@end
= _myString
в приведенном выше операторе @synthesize совершенно необязателен, но он помогает провести различие между доступом к ivar непосредственно в вашем коде и попыткой использовать методы доступа к свойствам, потому что для непосредственного использования ivar необходимо ввести это с подчеркиванием. Например, вы получите предупреждение, если будете лениться и попытаться выполнить myString=@"xyz"
, поэтому у вас будет напоминание, чтобы подумать, хотите ли вы использовать self.myString
или _myString
. Если у вас было @synthesize myString
без указания другого имени ivar, в этом случае вы не получите предупреждение компилятора. Что может быть проблемой, если вы внедрили пользовательский метод установки.
И это похоже на более чистый способ объявления иваров; вам не нужно указывать модификатор __weak
в этом случае, например, это подразумевается, если вы используете этот синтаксис.