与Java相比,Objective-C中的类级方法有什么不同和好处

Osc*_*Ryz 3 java objective-c class-method

例如,我知道Objective-C类方法可以被覆盖而Java不可以.

这有什么好处,还有其他不同之处?

Mar*_*ton 11

简而言之,Java中的静态方法只是附加到类的函数.它们不像实例方法那样工作,因为你不能使用this或super.他们实际上没有真正的概念,他们在课堂上.

Objective-C类方法虽然非常不同.除了类之外,它们与实例方法完全相同.鉴于类是Obj-C中的对象,这并不太令人惊讶.因此他们经历了所有相同的动态调度,你可以使用self来访问其他类方法,你可以使用super来调用超类的类方法.这样可以提供更大的灵活性,因为您可以使用类方法完成所有相同的操作,例如使用实例方法,例如nil消息传递,方法调整等.

  • 另外值得注意的是灵活性的具体好处.像[NSString stringWithFormat:@"foo"]这样的方法只是做[[[NSString alloc] initWithFormat:@"foo"] autorelease]的便捷方法.但是如果它是这样实现的并且你继承了NSString,那么[MYString stringWithFormat:@"foo"]仍然会返回一个NSString而不是一个MYString实例.因此它实现为[[[self alloc] initWithFormat:@"foo"] autorelease],以便将消息发送到正确的类. (2认同)