Objective c iOS–;子类化以避免代码重复和协议

Objective c iOS–;子类化以避免代码重复和协议,objective-c,protocols,subclass,Objective C,Protocols,Subclass,我需要所有视图控制器能够显示消息组合视图控制器(MFMessageComposeViewController),并处理MFMessageComposeViewControllerDelegate方法以查看消息是否已发送/取消/失败。所以我的想法是在这个视图控制器中对这些方法进行子类化UIViewControllerimpe。然后让所有需要能够发送消息的my view控制器都成为上述view controller的子类 就像BaseMessageViewController:UIViewContr

我需要所有视图控制器能够显示消息组合视图控制器(
MFMessageComposeViewController
),并处理
MFMessageComposeViewControllerDelegate
方法以查看消息是否已发送/取消/失败。所以我的想法是在这个视图控制器中对这些方法进行子类化
UIViewController
impe。然后让所有需要能够发送消息的my view控制器都成为上述view controller的子类

就像
BaseMessageViewController:UIViewController

然后是
ViewController1:BaseMessageViewController
ViewController2:BaseMessageViewController
等等

所以当我在做的时候,我想我会创建一个这样的协议:

@protocol MessageProcessing

@required

- (void)presentMessageCompose;
- (void)processMessageCancelled;
- (void)processMessageSent;
- (void)processMessageFailed;

@end
但我不确定
BaseMessageViewController
是否应符合此协议,或者我的“具体”视图控制器是否应符合此协议

一个想法是,如果我的
BaseMessageViewController
符合它,那么我的具体视图控制器将自动符合它,因为类继承?但我在我的具体视图控制器中没有看到任何警告,表明它们没有实现所需的方法


有人能帮我一下吗:)

如果这些是
BaseMessageViewController
发送给self的消息,那么没有理由定义协议。只需在
BaseMessageViewController
中声明方法,并对声明进行注释,以描述它们何时被发送

您还需要提供
BaseMessageViewController
中方法的实现,以抑制编译器警告。如果希望每个子类都实现这些方法,可以使用以下模式在
BaseMessageViewController
中定义这些方法:

- (void)processMessageCancelled {
    [self doesNotRecognizeSelector:_cmd];
    abort();
}

这是抽象基类协议问题的经典示例

  • 当您想要定义一个框架时,使用一个抽象基类(在Cocoa中,这些被称为类集群),其中一些常见的关注点由框架封装,一些特定的关注点由子类处理。例如,消息解析框架

  • 使用协议为需要自己的对象层次结构的类定义公共约定。例如,媒体播放器,根据媒体类型,“播放”和“停止”完全不同


或者,对于介于两者之间的内容,贾斯汀·斯帕尔·萨默斯(Justin Spahr summers)在libexobjc中定义了“具体协议”。(类似于Java8中的具体接口)

我正在寻找一种覆盖方法的方法,就像Java一样。。在超类中声明一些方法,然后在子类中声明自己的实现(如果愿意)是否可以将KVO添加到
BaseMessageViewController
,以便所有my view控制器在
BaseMessageViewController
中为属性设置KVO?