类方法和实例方法的区别是什么?

实例方法是访问器(getter和setter),而类方法几乎是其他所有东西吗?


当前回答

类方法

是声明为静态的方法。可以在不创建类实例的情况下调用该方法。类方法只能操作类成员,而不能操作实例成员,因为类方法不知道实例成员。类的实例方法也不能从类方法内部调用,除非在该类的实例上调用它们。

实例方法

另一方面,需要类的实例存在才能调用它们,因此需要使用new关键字创建类的实例。实例方法操作于类的特定实例。实例方法没有被声明为静态的。

其他回答

还要记住,同样的思想也适用于变量。在谈论变量时,你会遇到静态、成员、实例、类等术语,就像谈论方法/函数一样。

似乎Obj-C社区的常用术语是实例变量的ivar,但我还不是一个Obj-C的人。

类方法


类方法通常要么创建类的新实例,要么检索类的一些全局属性。类方法不能对实例进行操作,也不能访问实例变量。


实例方法


实例方法对类的特定实例进行操作。例如,您实现的accessors方法都是实例方法。您可以使用它们来设置或获取特定对象的实例变量。


调用


要调用实例方法,需要将消息发送到类的实例。

要调用类方法,可以直接将消息发送给类。


来源:IOS - Objective-C -类方法和实例方法

补充上述答案

Class方法将在Class上工作,我们将它用于一般用途,如+stringWithFormat,类的大小,最重要的是用于init等

NSString *str = [NSString stringWithFormat:@"%.02f%%",someFloat]; 

实例方法对一个类的实例起作用,而不是对一个类起作用,比如我们有两个人,我们想知道每个人的余额,这里我们需要使用实例方法。因为它不会返回一般响应。例如,确定NSSArray的计数等。

[johnson getAccountBalance];
[ankit getAccountBalance];

与大多数其他答案一样,实例方法使用类的实例,而类方法可以只使用类名。在Objective-C中,它们的定义如下:

@interface MyClass : NSObject

+ (void)aClassMethod;
- (void)anInstanceMethod;

@end

它们可以这样使用:

[MyClass aClassMethod];

MyClass *object = [[MyClass alloc] init];
[object anInstanceMethod];

一些真实世界的类方法的例子是许多基础类的方便方法,如NSString的+stringWithFormat:或NSArray的+arrayWithArray:。实例方法是NSArray的-count方法。

类方法

是声明为静态的方法。可以在不创建类实例的情况下调用该方法。类方法只能操作类成员,而不能操作实例成员,因为类方法不知道实例成员。类的实例方法也不能从类方法内部调用,除非在该类的实例上调用它们。

实例方法

另一方面,需要类的实例存在才能调用它们,因此需要使用new关键字创建类的实例。实例方法操作于类的特定实例。实例方法没有被声明为静态的。