MST

星途 面试题库

面试题:Objective-C 协议的多继承与方法可选性

在 Objective-C 中,一个类如何实现多个协议?协议中的方法可分为必需方法和可选方法,如何定义可选方法?当一个类实现了包含可选方法的协议,但没有实现该可选方法,在运行时会有什么情况发生?
29.0万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

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