面试题答案
一键面试- 在Objective-C协议中定义可选方法:
在Objective-C协议中,可以通过
@optional
关键字来定义可选方法。示例如下:
@protocol MyProtocol <NSObject>
// 必选方法
- (void)requiredMethod;
// 可选方法
@optional
- (void)optionalMethod;
@end
- 在代理模式中优雅处理代理协议中的可选方法调用:
在调用代理的可选方法时,应该先检查代理是否实现了该方法,以避免程序崩溃。可以使用
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
方法时,才会调用该方法,从而避免因代理未实现该方法而导致程序崩溃。