关于iOS:使用类方法而不是实例方法有什么好处吗?


is there any advantage when use class method instead of instance method?

本问题已经有最佳答案,请猛点这里访问。

使用类方法而不是实例方法有什么好处吗?目标C:

1
2
3
4
5
6
7
8
class method:
use symbol + (void) method;
call: [Class method];


instance method:
use symbol - (void) method;
call: [class.obj method];


我的解释有点不同。

实例方法被发送到类的INSTANCE。类的实例是具体的。它的状态数据在对象的生命周期中一直存在。当您向一个对象发送一条消息时,它可以使用该状态数据来做一些事情,并且可以为以后记住信息。

类方法作为一个整体发送到类。类是一个更抽象的概念。类不保存状态数据,至少在目标C中(在其他语言如C++中,有属于整个类的类变量,但目标C没有类变量)。

我们来看一个汽车工厂的例子。

汽车厂是一流的。car类有一个类方法buildcar。buildcar方法接受参数,这些参数告诉汽车应该是什么颜色、发动机应该有多大、它应该有什么选项等。您向汽车工厂(类)发送了一条buildcar消息,它创建并返回该类的一个实例(汽车工厂为您生成一辆汽车并将其提供给您)。

一旦你创建了一辆车,那辆车就有状态变量来存储诸如收音机上的频道、油箱里剩余的汽油量、里程("公里数")。在里程表上,刹车等的磨损程度,不同的汽车对这些变量有不同的值。

你可以问一辆车油箱里还剩下多少油。(实例方法)汽车A可能有一个满油箱,汽车B可能几乎是空的。

然而,问汽车厂油箱里有多少油是没有意义的。汽车厂没有油箱。然而,你可以向汽车厂询问它能生产的汽车类型以及这些汽车的选择。这是一个静态的信息,对那个汽车厂来说总是正确的。

除了"工厂方法"(例如,为我造一辆车)之外,您还可以使用类方法,就像在过程语言中使用函数一样。类方法是独立的。您将所有参数传递到您需要的方法中,以便执行所需的任何任务,然后返回单个结果(或者对于void类方法没有结果)。一旦类方法执行完毕,就没有状态数据可用于记录所发生的情况。


这不是一个有利的问题。这就像问用锤子而不是锯子是否有好处。这个问题是胡说,你用锤子锤,用锯子锯。

对于与类实例相关的事物,可以使用实例方法。您将类方法作为一个整体用于与类相关的事物。