Objective c 方法是类方法还是实例方法
在我的代码中,我想知道方法是类方法还是实例方法。我目前使用的代码是有效的,但我想知道是否有更好的方法 如果是类方法或实例,则要“检测”的当前代码:Objective c 方法是类方法还是实例方法,objective-c,Objective C,在我的代码中,我想知道方法是类方法还是实例方法。我目前使用的代码是有效的,但我想知道是否有更好的方法 如果是类方法或实例,则要“检测”的当前代码: Method method = class_getInstanceMethod(class, selector); if (method) { __strong Class object = [[class alloc] init]; objc_msgSend(object, selector); }else { method = cla
Method method = class_getInstanceMethod(class, selector);
if (method) {
__strong Class object = [[class alloc] init];
objc_msgSend(object, selector);
}else {
method = class_getClassMethod(class, selector);
if (method) {
objc_msgSend(class, selector);
}
}
除了两条
if
语句之外,几乎没有什么可以改进的。您可以使用respondsToSelector:
方法,但由于您没有对象开始,因此在if
中会出现if
,而不是外观更好的else if
:
if ([class respondsToSelector:selector]) {
// Call class method
} else {
id object = [[class alloc] init];
if ([object respondsToSelector:selector]) {
// Call instance method
}
}
如果可以修改程序流以对象而不是类开始,则可以执行以下操作:
if ([object respondsToSelector:selector]) {
// Call instance method
} else if ([[object class] respondsToSelector:selector]) {
// Call class method
}
我很确定你的代码无法改进。如果您真的愿意,您可以将objc\u msgSend更改为
性能选择器:
,但这样做没有实际意义。我很好奇您在这里的动机。objective=c中的每个签名都会告诉您它是类方法还是实例方法,所以我很好奇为什么在运行时需要这个time@NuclearGhost我想对可能不存在的对象调用一个方法。这可以是实例方法或类方法。Warren Burton为什么要反转,因为它只有在是类方法时才会实例化。可能无法导入此对象文件。这是一个通用函数。例如,我可以创建两个函数,一个用于类,另一个用于类respondsToSelector@MouNtant方法是选择器,对象有选择器。这比你在问题中发布的代码要简单得多overkill@MouNtant我没有意识到一开始你没有对象
。我以与您相同的方式编辑了答案,以类方法开始。@SimonMcLoughlin我觉得这段代码基本上是相同的,并且不太简单。(回答中的代码已更改)@MouNtant我犯了相同的错误,没有注意到对象init。仍然认为它更干净,更可读的方式。还有,为什么你总是在向上投票和向下投票之间切换。不管怎样,它仍然是可靠的代码