这可能是一个天真的问题,但我感觉有点迷茫。我在 Apple Documentation 阅读了有关协议(protocol)的 iOS 开发人员指南。 ,但没有完全说得通。让我用最短的方式解释我的困境。
假设我有如下协议(protocol),
@protocol MyProtocol<NSObject>
- (void)someMessage;
@end
在我的代码中,我声明了这样一个变量,
id<MyProtocol> someVar;
到目前为止一切顺利,但是 someVar
是一个 id 类型,所以我们将在哪里实现 -(void) someMessage;
?
NOTE: I have knowledge such as, Implementation of defined functions of interface should be inside a Class which implements that interface. This understanding is from Java so, and in Java it is very apparent to know which object is from which class and what interface that class implements. But above Objective C way just confused me :(.
最佳答案
当你写的时候:
id<MyProtocol> someVar
您只是声明“someVar”将是任何类的对象,但此类将遵守协议(protocol) MyProtocol。
所以你的代码中会有一些点会实例化someVar。此时 someVar 将关联到一个类。此类必须满足 MyObject 协议(protocol)。 请注意,编译器会尽力在出现问题时向您发出警告,例如如果您将此对象转换为某个不遵守协议(protocol)的类,例如假设您的协议(protocol)定义了一个名为“protocolMethod”的方法,那么:
[(NSArray *)someVar protocolMethod]
将生成一个编译器警告(“NSArray 可能不响应 protocolMethod”)。
当然,您永远不会受到运行时错误的保护:因此,如果在运行时您将 someVar 创建为不满足协议(protocol)的类,那么对协议(protocol)方法的任何调用都会引发异常。
关于objective-c - id 确认了一个协议(protocol),但是在哪里实现呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7634394/