У меня есть протокол:Может ли унаследованный @property не удовлетворять <protocol> @property?
@protocol Gadget <NSObject>
@property (readonly) UIView *view;
- (void) attachViewToParent:(UIView *)parentView;
@end
и «абстрактный» базовый класс, с реализацией (как добытчик, не показан) -(UIView *)view
:
// Base functionality
@interface AbstractGadget : NSObject {
UIView *view;
}
@property (readonly) UIView *view;
@end
Но когда я реализовать Gadget
протокол в подклассе AbstractGadget
, например, так:
// Concrete
@interface BlueGadget : AbstractGadget <Gadget> {
}
- (void) attachViewToParent:(UIView *)parentView;
@end
@implementation BlueGadget
- (void) attachViewToParent:(UIView *)parentView {
//...
}
@end
Я получаю ошибку компилятора говорить мне "warning: свойство 'view' требует метода '-view', который будет определен. " Я могу сделать это уйти с помощью @dynamic
, или добавление метода заглушки:
- (UIView *) view {
return [super view];
}
Но я просто хочу знать, если я делаю что-то, что не поддерживается, то, что я не должен делать, или если это просто ограничение/ошибка в компиляторе?
+1 так же, как и мой ответ, но гораздо лучше и со ссылкой на документы. – JeremyP
Мне придется протестировать это с помощью Clang и Xcode 4, когда я смогу взять их в руки. – Sophistifunk