Objective-C 协议静态方法?

Posted

技术标签:

【中文标题】Objective-C 协议静态方法?【英文标题】:Objective-C protocol static method? 【发布时间】:2010-03-06 18:35:57 【问题描述】:

我在 Objective-C 中有一个协议,如下所示:

@protocol Handler
+(NSString*) getValue;
@end

所以现在说我有一个继承这个协议的实例,我想调用这个方法:

[handlerInstance getValue];

这会给出警告,因为getValue 方法不是实例方法。如何从我的实例中正确调用此方法? (不知道具体类)?我猜是这样的,但我不确定:

[[handlerInstance class] getValue];

【问题讨论】:

【参考方案1】:
[[handlerInstance class] getValue];

是的,像这样。

与 Java 和 C++ 不同,类方法只能发送到类。

【讨论】:

说真的,我想我不应该再猜到自己! 不是我们所有人。在发布之前尝试它不会给其他人带来知识的好处。我来这里是为了寻找它的行为方式,因为 1.) 它比尝试它更快 2.) 如果有我没有想到的陷阱,有人可能会在这里注意到它们。因此,先发帖对于后来的每个人来说都是更少的工作。感谢 Kenny 和 Zenox。 所以如果我有一个变量 id<Handler> handler 我应该分配 instance 还是 [instance class] ?即使没有可用的实例,这也能工作吗? (只有Class)? @chakrit:[[instance class] getValue]。如果您有Class cls,请使用[cls getValue]。请注意,如果handler == nil,此方法将不会执行。 一般来说,类方法的重点是不使用实例。

以上是关于Objective-C 协议静态方法?的主要内容,如果未能解决你的问题,请参考以下文章

在 Objective-c 上使用静态 Swift 方法时,“选择器没有已知的类方法”

使用 XCTest 在 Objective-C 静态库中创建测试用例

在 Objective-C 类别中初始化一个静态变量

Objective-C 静态、外部、公共变量

静态方法 NSInvocation

帮助在monotouch中绑定一个静态objective-c库