gpt4 book ai didi

java - Objective-C 。你能像 Java 接口(interface)那样使用协议(protocol)吗?

转载 作者:IT老高 更新时间:2023-10-28 20:32:18 28 4
gpt4 key购买 nike

这些基本上是一样的吗?

例如,如果我有一个 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 的客观 C 对象”。

通常,您希望能够保留/释放/自动释放对象,并且通常将其视为普通的 Cocoa 对象,因此添加 NSObject 协议(protocol)通常也很好,这就是第二种情况。

如果你想确保它实际上是一个正确的 Cocoa 对象(不包括基于 NSProxy 的对象),那么你可以使用最后一种形式,它基本上说“我想要任何实现 CoolProtocol 的真正的 Cocoa Objective C 对象”。

关于java - Objective-C 。你能像 Java 接口(interface)那样使用协议(protocol)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1010541/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com