@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 в реализации категорий, так что это может быть одной из причин.

Другие вопросы по тегам