这些基本上是一回事吗?例如,如果我有Java接口(interface)public interface CoolObject{ ...}我可以在将CoolObject作为参数的函数中使用实现CoolObject接口(interface)的任何对象:public void foo(CoolObject o) {...}在Objective-C中也一样吗?@protocol CoolProtocol...@end@interface Foo: NSObject <CoolProtocol>...@end(void) - someMethod: (CoolProtocol *) obj {}上述工作是否可行(并被认为是正确的?)谢谢你的时间。让我知道您是否需要我澄清我的问题。 最佳答案 关。在 objective-c 中,您指示对象实现带有尖括号的协议(protocol),因此您可以像以下方法之一编写方法:- (void) someMethod: (id <CoolProtocol>) obj { }- (void) someMethod: (id <NSObject, CoolProtocol>) obj { }- (void) someMethod: (NSObject <CoolProtocol> *) obj { }在所有情况下,您都在说someMethod需要一个实现CoolProtocol的对象。id是指向任何种类的Objective C对象的通用指针。因此id 的意思是“任何实现CoolProtocol的 objective-c 对象”。通常,您希望能够保留/释放/自动释放对象,并且通常将其像普通的Cocoa对象一样对待,因此添加NSObject协议(protocol)通常也是一件好事,这是第二种情况。而且,如果要确保它实际上是一个适当的Cocoa对象(不包括基于NSProxy的对象),则可以使用最后一种形式,该形式基本上是“我想要实现CoolProtocol的任何种类的真实Cocoa Objective C对象”。
09-26 16:55