2013-09-13 2 views
1

Почему во многих фрагментах код объявляет переменную экземпляра как и для чего? то, что другое о собственности и неимущественныхОбъявление переменной экземпляра переменной и свойства с таким же именем

#import <Foundation/Foundation.h> 

@interface class1:NSObject 

{ 
    NSMutableString *currentData; 
} 
@property (nonatomic, retain) NSMutableString * currentData; 
+0

Это старый. Никто больше не должен этого делать. Просто объявите свойство. Больше нет необходимости также объявлять соответствующий ivar. – rmaddy

ответ

1

То, что вы видели это «старый код» ... но иногда вам все равно нужно поддерживать старые версии (например, 10.5).

Недвижимость - это просто пара геттеров и сеттеров (ну .. это зависит от выбранных вами атрибутов: например, readonly будет генерировать только геттер). Но свойство управляет (и поэтому ему) переменной экземпляра. Обычно то, что вы видите в файле реализации что-то вроде

@implementation class1 
@synthesize currentData = currentData; 
@end 

Это означает, что создание и геттер сеттер, который использует currentData в качестве переменной.

Для новой версии вам не нужно создавать переменную экземпляра, и вы можете просто ввести оператор property и synthesize. В самой последней языковой версии вам даже не нужна инструкция синтеза. Автоматически создается переменная экземпляра с именем _propertyName (подчеркивание + имя свойства).

BTW: иногда вам по-прежнему необходимо создать свой собственный геттер и/или сеттер. Применяется классическое соглашение об именах (например, - (void)setCurrentData: (NSMutableString*)newData; для сеттера и - (NSMutableString*)currentData; для геттера), но те же правила, что и раньше, для свойств: если вы поддерживаете только самые последние операционные системы, вы можете просто написать оператор @property и правильно использовать ваш геттер и сеттер, используя «подчеркнутый» переменная ...

Смежные вопросы