继承的@property不能满足<protocol> @property吗?

Sop*_*unk 4 oop cocoa objective-c cocoa-design-patterns

我有一个协议:

@protocol Gadget <NSObject>

@property (readonly) UIView *view;

- (void) attachViewToParent:(UIView *)parentView;

@end
Run Code Online (Sandbox Code Playgroud)

和一个"抽象"基类,具有以下实现(作为getter,未显示)-(UIView *)view:

// Base functionality
@interface AbstractGadget : NSObject {
    UIView *view;
}

@property (readonly) UIView *view;

@end
Run Code Online (Sandbox Code Playgroud)

但是当我Gadget在子类中实现协议时AbstractGadget,如下所示:

// Concrete
@interface BlueGadget : AbstractGadget <Gadget> {
}

- (void) attachViewToParent:(UIView *)parentView;

@end


@implementation BlueGadget

- (void) attachViewToParent:(UIView *)parentView {
    //...
}

@end
Run Code Online (Sandbox Code Playgroud)

我收到编译错误告诉我" 警告:属性'视图'需要定义方法'-view'." 我可以使用@dynamic或添加存根方法使其消失:

- (UIView *) view {
    return [super view];
}
Run Code Online (Sandbox Code Playgroud)

但我只是想知道我做的是不支持的东西,我不应该做的事情,或者它只是编译器中的限制/错误?

Ala*_*ers 5

通过将属性声明为@dynamic,您告诉编译器属性getter(如果需要,可以设置setter)在其他地方实现(可能在运行时).这听起来像是一个非常合理的用例.

有关详细信息,请参阅文档.