-2

类方法是静态方法吗?这个论点是真的吗?所以如果我们声明 NSString 因为 alloc 是一个类方法

NSString *hello = [[NSString alloc] init]; 类方法

[你好 isEqualtoString:@"Hello"]; 实例方法

4

2 回答 2

2

面向对象编程中,类方法是应用于/由类调用的方法/函数,而不是它的特定实例,即该类的对象。实例方法是直接在对象上调用的方法。

在某些语言中,每个类都由一个 Class 对象表示,因此类方法是该对象的实例方法。这对于应用反射和内省很有用。

在objective-c 中,类方法是通过使用+其声明之前的符号来定义的,而实例方法则使用-它们之前的符号。这是一个例子:

@interface Rectangle : NSObject

    + (void)join:(Rectangle *)firstRect withAnother:(Rectangle *)secondRect;
    - (void)area;

@end

当您不需要引用特定对象时经常使用类方法,或者您必须更改所有这些方法,或者您只需要一个与实例对象无关的函数的位置。

static在你的问题中说。您可能指的是 Java 之类的语言,其关键字 static 位于类方法的声明之前。在 objective-c 中,关键字 static 与C中使用的含义相同。

作为参考,您可以在 SO或此段落中查看此答案

于 2012-08-31T06:42:16.407 回答
0

您可以类方法视为类似于staticC++ 中的方法,如

[NSString alloc]  <=>  /* hypothetical */ NSString::alloc()

但在幕后,存在重大差异。例如,在 C++static方法中,您不能使用this; 在 Objective-C 类方法中,self是完全有效的并且引用类对象。

于 2012-08-31T07:00:15.997 回答