@property и @synthesize: почему оба? - PullRequest
2 голосов
/ 19 ноября 2009

Я поднимаюсь по кривой обучения X-кода уже около двух месяцев. Я понимаю назначение директив @ property / @ synthesize, но, кажется, что немного избыточно всегда объявлять свойства в файле .h, а затем синтезировать их в файле .m.

Зачем компилятору нужны обе директивы? Если они всегда используются вместе, не является ли один из них технически избыточным?

Заранее благодарим за любые идеи по этому вопросу.

Джон Донер

Ответы [ 3 ]

3 голосов
/ 19 ноября 2009

Ключевое слово @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 .

1 голос
/ 19 ноября 2009

Это так, что вы можете разделить реализацию и объявление. Мне это кажется довольно опрятным.

0 голосов
/ 19 ноября 2009

Ну, вы не можете использовать @synthesize в реализации категорий, так что это может быть одной из причин.

...