Компиляция с использованием синтаксиса свойств требует, чтобы тип получателя был известен во время компиляции. Возможно, я чего-то не понимаю, но это похоже на сломанную или неполную реализацию компилятора, учитывая, что Objective-C - это динамический язык.
Свойство "комментарий" определяется с помощью:
@property (nonatomic, retain) NSString *comment;
и синтезируется с:
@synthesize comment;
«документ» является экземпляром одного из нескольких классов, которые соответствуют:
@protocol DocumentComment <NSObject>
@property (nonatomic, retain) NSString *comment;
@end
и просто объявлен как:
id document;
При использовании следующего синтаксиса свойства:
stringObject = document.comment;
gcc генерирует следующую ошибку:
error: request for member 'comment' in something not a structure or union
Однако следующий эквивалентный синтаксис метода получателя компилируется без предупреждения или ошибки и работает нормально, как и ожидалось, во время выполнения:
stringObject = [document comment];
Я не понимаю, почему свойства требуют, чтобы тип получателя был известен во время компиляции. Есть ли что-то, что мне не хватает? Я просто использую последний синтаксис, чтобы избежать ошибки в ситуациях, когда принимающий объект имеет динамический тип. Свойства кажутся недоделанными.