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

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


当前回答

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

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

其他回答

类方法不能改变或知道任何实例变量的值。这应该是判断实例方法是否可以是类方法的标准。

你的问题的答案并不特定于objective-c,但是在不同的语言中,类方法可能被称为静态方法。

类方法和实例方法之间的区别是

类方法

操作Class变量(它们不能访问实例变量) 不需要一个对象被实例化应用 有时可能是一种代码气味(一些刚接触OOP的人把它作为在面向对象环境中进行结构化编程的拐杖)

实例方法

操作实例变量和类变量 必须对一个实例化对象进行操作

我认为最好的理解方法是看一下alloc和init。正是这个解释让我明白了其中的区别。

类方法

类方法作为一个整体应用于类。如果检查alloc方法,它是一个类方法,由方法声明前的+表示。它是一个类方法,因为它应用于类以创建该类的特定实例。

实例方法

使用实例方法修改类的特定实例,该实例是该实例惟一的,而不是整个类惟一的。例如,Init(在方法声明之前用-表示)是一个实例方法,因为您通常在用alloc创建该类之后修改该类的属性。

例子

NSString *myString = [NSString alloc];

调用类方法alloc是为了生成该类的实例。注意消息的接收者是一个类。

[myString initWithFormat:@"Hope this answer helps someone"];

你在修改NSString的实例myString通过在那个实例上设置一些属性。注意消息的接收者是一个实例(NSString类的对象)。

类方法


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


实例方法


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


调用


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

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


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

Instances方法作用于类的实例(即“对象”)。类方法与类相关联(大多数语言使用关键字static来表示这些家伙)。