Практическое различие, которое я обнаружил, заключается в том, что отладчик не отображает значение свойств, а только переменные экземпляра.
Таким образом, ваш первый пример (который предполагает, что вы используете директиву @synthesize
для создания вашего метода получения / установки) автоматически создает ivar, не будет иметь значения, которое вы можете легко получить во время отладки. В конечном итоге вам придется отправлять много NSLog
сообщений, а не просто просматривать значения при пошаговом выполнении кода.
Помимо этого, который, по-видимому, относится к этой теме, я обычно добавляю свои ivars к «iv» и изменяю свои настройки цвета в настройках XCode, чтобы никогда не быть уверенным, получаю ли я доступ к свойству или ivar.
Пример
@interface MyClass : NSObject {
NSString *ivName;
NSString *ivTitle;
}
@property (nonatomic, copy) NSString *Name;
@property (nonatomic, copy) NSString *Title;
@end
Теперь для этого требуется небольшой трюк (связать их вместе) при синтезе свойств, которые я покажу ниже:
@implementation MyClass
@synthesize Name = ivName;
@synthesize Title = ivTitle;
Таким образом, мне всегда очень легко точно знать, что происходит, с первого взгляда. Да, контекст также может сказать вам, обращаетесь ли вы к свойству ivar / свойству, но почему бы не сделать это проще?