我有一個協議:繼承的@property可以不滿足<protocol> @property嗎?
@protocol Gadget <NSObject>
@property (readonly) UIView *view;
- (void) attachViewToParent:(UIView *)parentView;
@end
和一個 「抽象」 基類,有一個實現(作爲一個getter,未顯示)的-(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
我得到一個編譯錯誤告訴我「警告:屬性'視圖'需要方法'-view'被定義爲。「我可以讓這個消失使用@dynamic
,或添加一個存根方法:
- (UIView *) view {
return [super view];
}
但我只是想知道,如果我做的東西是不支持的,這是我不應該這樣做,或者如果它只是編譯器中的限制/錯誤?
+1與我的回答相同,但要好得多,並鏈接到文檔。 – JeremyP 2010-07-21 09:34:08
我必須用Clang和Xcode 4來測試它,當我能夠接觸到它們時。 – Sophistifunk 2010-07-22 00:00:54