了解Objective-C中的协议继承

Mus*_*afa 12 iphone inheritance protocols objective-c

如果有人能解释协议继承背后的逻辑,我将不胜感激.例如,以下是什么意思(UITableView.h):

@protocol UITableViewDelegate<NSObject, UIScrollViewDelegate> 
Run Code Online (Sandbox Code Playgroud)

以下类实现不起作用.我有一个类View1(继承UIView),带有相关的协议.我有另一个类,View2(其中包含View1).现在我想继承该协议.任何人都可以指出我正确的方向.

第1类:

@protocol View1Delegate;

@interface View1 : UIView {
    id <View1Delegate> delegate;
    // . . .
}

@property (nonatomic, assign) id <View1Delegate> delegate; // default nil. weak reference

@end

@protocol View1Delegate <NSObject>
- (void)View1DelegateMethod;
@end

@implementation View1

@synthesize delegate;

// . . .
@end
Run Code Online (Sandbox Code Playgroud)

第2类:

@protocol View2Delegate;

@interface View2 : View1 {
    id <View2Delegate> delegate;
    // . . .
}

@property (nonatomic, assign) id <View2Delegate> delegate; // default nil. weak reference

@end

@protocol View2Delegate <NSObject>
- (void)View2DelegateMethod;
@end

@implementation View2

@synthesize delegate;

// . . .
@end
Run Code Online (Sandbox Code Playgroud)

Jos*_*erg 12

将其视为构图而非继承.

@protocol UITableViewDelegate<NSObject, UIScrollViewDelegate>定义了一个协议,其中包括协议的所有方法,NSObject协议UIScrollViewDelegate以及为UITableViewDelegate协议定义的任何方法.当您子类化并创建新属性时,您将覆盖超类属性的类型.为了使这项工作我认为你想要的,你应该声明View2Delegate@protocol View2Delegate <NSObject, View1Delegate>.