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

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


当前回答

如果我理解正确的话。

类方法不需要分配该对象的实例来使用/处理它。类方法是自包含的,可以不依赖于该类的任何对象的状态进行操作。类方法被期望为它自己的所有工作分配内存,并在完成时释放,因为该类的任何实例都不能释放以前调用类方法时分配的任何内存。

实例方法正好相反。除非分配该类的实例,否则无法调用它。它就像一个普通的类,有一个构造函数,也可以有一个析构函数(清理所有分配的内存)。

在大多数情况下(除非您正在编写一个可重用的库),您不应该需要类变量。

其他回答

类方法通常用于创建该类的实例

例如,[NSString stringWithFormat:@"SomeParameter"];返回一个带参数的NSString实例。因此,因为它是一个返回其类型的对象的Class方法,所以它也被称为方便方法。

实例方法应用于类的实例(即对象),而类方法应用于类本身。

在c#中,类方法被标记为静态。未标记为static的方法和属性是实例方法。

class Foo {
  public static void ClassMethod() { ... }
  public void InstanceMethod() { ... }
}

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

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

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

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