协议是一种指定一组方法的方法,如果它想与你的一个类一起工作,你希望一个类实现它。委托和数据源,如 UITableViewDelegate 和 UITableViewDataSource 确实是协议。
您可以通过以下方式指定协议:
@protocol MyProtocol <NSObject>
- (void)aRequiredMethod;
@required
- (void)anotherRequiredMethod;
@optional
- (void)anOptionalMethod;
@end
在 @required 之后或任何其他说明符之前声明的方法是必需的,并且想要使用您的协议的类需要实现所有这些方法。您还可以通过在 @optional 说明符之后声明一些可选方法来声明它们。
然后,您可以在类的接口中指定一个类“符合”协议(实现所需的方法):
@interface MyClass <MyProtocol>
@end
您通常使用属性保留对符合协议的对象的引用。例如,要跟踪委托:
@property (nonatomic, weak) id<MyProtocol> delegate;
此时,在您的代码中,您只需调用您要在您保留引用的对象上调用的方法,并像使用任何其他方法一样实现您的协议:
[self.delegate aRequiredMethod];
要检查对象是否符合协议,您可以调用
[self.delegate conformsToProtocol:@protocol(MyProtocol)]
要检查对象是否实现了可以调用的方法
[self.delegate respondsToSelector:@selector(anOptionalMethod)]
有关更多信息,请查看 Apple 的使用协议指南。