gpt4 book ai didi

objective-c - "class method"和 "static method"有什么区别?

转载 作者:太空狗 更新时间:2023-10-30 03:08:44 25 4
gpt4 key购买 nike

我使用过几种不同的语言,例如 Java、C# 和 Objective-C。

在大多数语言中,不需要对象实例的方法称为静态方法。然而,当谈到 Objective-C 时,有些人在您称它们为静态方法时会产生抵触情绪,他们希望您称它们为类方法。

为什么它们被称为类方法而不是静态方法?静态方法和类方法有什么区别?

最佳答案

So my question is why are they called class methods instead of a static method? What is the difference between a static method and a class method?

来自维基百科:静态方法既不需要类的实例,也不能隐式访问此类实例的数据(或 this、self、Me 等)。

这准确描述了 Objective-C 的类方法不是

Objective-C 类方法非常需要一个作为方法调用目标的实例。也就是说,它需要描述被调用的类对象的元类实例。

与静态方法不同,Objective-C 的类方法可以被继承(结合前面提到的 self,这正是为什么许多类可以共享一个简单的 实现的原因+alloc on NSObject 而无需他们自己的自定义实现)和调用类方法通过与任何其他方法调用站点完全相同的基于 objc_msgSend* 的调度机制.

Objective-C 的类方法可以在整个类层次结构中被覆盖,并且它们可以被混合。通常提供静态方法代替类方法的语言不支持其中任何一种。

底线是静态方法和类方法非常不同。虽然这种差异对于日常编码目的来说是显而易见的,但在某些情况下,了解类方法的工作原理可以为您节省大量不必要的代码行。

例如,您不能使用静态方法执行此操作:

@interface AbstractClass:NSObject
+ factory;
@end

@implementation AbstractClass
+ factory
{
return [[[self alloc] init] autorelease];
}
@end

@interface Concrete1:AbstractClass
@end
@implementation Concrete1
@end
@interface Concrete2:AbstractClass
@end
@implementation Concrete2
@end

void foo() {
Concrete1 *c = [Concrete1 factory];
Concrete2 *d = [Concrete2 factory];
... etc ...
}

关于objective-c - "class method"和 "static method"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8089186/

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