类方法和实例方法

时间:2012-08-31 06:25:00

标签: objective-c

类方法是静态方法吗?这个说法是真的吗?因此,如果我们声明NSString,因为alloc是一个类方法

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

[hello isEqualtoString:@“Hello”]; 实例方法

2 个答案:

答案 0 :(得分:2)

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

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

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

@interface Rectangle : NSObject

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

@end

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

你在问题​​中说 static 。您可能指的是像Java这样的语言,它们在声明类方法之前有关键字static。在objective-c中,关键字static与used in C具有相同的含义。

作为参考,您可以查看this answer on SOthis paragraph

答案 1 :(得分:0)

您可以认为类方法与C ++中的static方法类似,如

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

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