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?