2015-03-17 2 views
0

Когда мы создаем свойство и определяем для него синтез, компилятор автоматически создает методы getters и seters, не так ли?@synthesize за кулисами

Теперь, если я выполнить эту команду:

@property(nonatomic) int value; 

@synthesize value; 

value = 50; 

Что происходит:

Компилятор сохраняет значение '50' в собственности?

property (nonatomic) int value; // Here is the stored value 50! 

или компилятор создает переменную за кулисами с тем же именем свойства, как это:

interface myClass: NSObject { 
    int value; // Here is the stored value 50! 
} 

Что на самом деле происходит и каковы альтернативы перечисленных выше является правильным?

+1

Я не понимаю, почему это создало бы переменную за кулисами, но я понятия не имею. Почему вы спрашиваете? – adam10603

+0

@ adam10603 Я спросил об этом, потому что я начинаю изучать динамику и устанавливаю динамику свойств, которую вы должны сделать вручную, теперь, когда уже знаете, как работает синтез, уже есть лучшее представление о том, как работает динамик , – LettersBa

ответ

4

Это, вероятно, семантика, но @synthesize больше не требуется для свойств. Компилятор делает это автоматически.

Но для ответа на ваш вопрос, компилятор создает переменную экземпляра, чтобы сохранить значение для свойства.

@property (nonatomic, assign) NSInteger value; 
// an instance variable NSInteger _value; will be created in the interface. 

Вы можете использовать переменную экземпляра в своем собственном коде, если вам нужно получить к ней доступ, не пройдя через свойство. Это обычно бывает при переопределении сеттера:

- (void)setValue:(NSInteger)value { 
    _value = value; 
    // custom code 
} 
+0

Итак ... Собственность, как если бы она действовала как своего рода мост, не так ли? – LettersBa

+0

@property генерирует переменную экземпляра и методы setter и getter, а не мост. Когда вы обращаетесь к свойству типа object.property, компилятор переводит его в [свойство объекта]: 'или' object.property = value; 'в' [object setProperty: value]; '- это скорее синтаксический короткий чем мост. – Jasarien

+0

Спасибо, человек! отлично. – LettersBa