- 一个类实现多个协议:在 Objective-C 中,一个类可以通过在类的接口定义中列出多个协议来实现多个协议。例如:
@interface MyClass : NSObject <Protocol1, Protocol2, Protocol3>
// 类的属性和方法声明
@end
- 定义可选方法:在协议定义中,使用
@optional
关键字来定义可选方法。示例如下:
@protocol MyProtocol <NSObject>
@required
// 必需方法声明
- (void)requiredMethod;
@optional
// 可选方法声明
- (void)optionalMethod;
@end
- 未实现可选方法的运行时情况:当一个类实现了包含可选方法的协议,但没有实现该可选方法时,在运行时不会发生编译错误或崩溃。因为可选方法不是强制要求实现的。如果在代码中向该类的实例发送了未实现的可选方法消息,运行时会检查该实例是否能够响应这个选择子(selector),如果不能响应,消息会被忽略,不会导致程序崩溃。可以通过
respondsToSelector:
方法在发送消息前检查对象是否能响应某个选择子,如:
MyClass *obj = [[MyClass alloc] init];
if ([obj respondsToSelector:@selector(optionalMethod)]) {
[obj optionalMethod];
}