@property и @synthesize: почему оба?
Я поднимаюсь по кривой изучения X-кода уже около двух месяцев. Я понимаю назначение директив @property/@synthesize, но кажется, что немного избыточно всегда объявлять свойства в файле.h, а затем синтезировать их в файле.m.
Зачем компилятору нужны обе директивы? Если они всегда используются вместе, не является ли один из них технически избыточным?
Заранее спасибо за любые идеи на эту тему.
Джон Донер
3 ответа
@property (...) foo
Ключевое слово используется внутри вашего определения класса. Вам не нужно использовать @synthesize
Ключевое слово в файле реализации, если вы предоставите соответствующие getters/setters
,
Пример:
@property int SomeInt;
---
-(int)SomeInt {
return _someInt;
}
-(void)setSomeInt:(int)newValue {
_someInt = newValue;
}
Или вы можете использовать либо @synthesize foo
сообщить компилятору сгенерировать getters/setters
для тебя или @dynamic
сообщить компилятору, что эти методы будут доступны во время выполнения - оба в файле реализации.
На самом деле, в Objective-C есть больше волшебства за свойствами, читайте о них в Справочной библиотеке Apple.
Это так, что вы можете разделить реализацию и объявление. Кажется довольно опрятным для меня.
Ну, вы не можете использовать @synthesize
в реализации категорий, так что это может быть одной из причин.