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 方法时,“选择器没有已知的类方法”