MST

星途 面试题库

面试题:Objective-C协议(Protocol)中的可选方法与代理模式

在Objective-C协议中如何定义可选方法?在代理模式中,如何优雅地处理代理协议中的可选方法调用,避免因为代理未实现该方法而导致程序崩溃?请举例说明。
35.0万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试
  1. 在Objective-C协议中定义可选方法: 在Objective-C协议中,可以通过@optional关键字来定义可选方法。示例如下:
@protocol MyProtocol <NSObject>

// 必选方法
- (void)requiredMethod;

// 可选方法
@optional
- (void)optionalMethod;

@end
  1. 在代理模式中优雅处理代理协议中的可选方法调用: 在调用代理的可选方法时,应该先检查代理是否实现了该方法,以避免程序崩溃。可以使用respondsToSelector:方法来进行检查。示例如下: 假设有一个视图控制器ViewController,它有一个代理属性delegate,并且遵循MyProtocol协议。
#import "ViewController.h"
#import "MyProtocol.h"

@interface ViewController ()
@property (nonatomic, weak) id<MyProtocol> delegate;
@end

@implementation ViewController

- (void)someAction {
    if ([self.delegate respondsToSelector:@selector(optionalMethod)]) {
        [self.delegate optionalMethod];
    }
}

@end

这样,只有当代理实现了optionalMethod方法时,才会调用该方法,从而避免因代理未实现该方法而导致程序崩溃。