使用类方法代替实例方法有什么优点吗

  • 本文关键字:实例方法 类方法 ios
  • 更新时间 :
  • 英文 :


使用类方法而不是实例方法有什么优势吗?对于Objective-c:

class method:
use symbol + (void) method;
call: [Class method];

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

我的解释有点不同

实例方法被发送到类的INSTANCE。类的实例是一个具体的东西。它具有在对象生命周期内持续存在的状态数据。当您向对象发送消息时,它可以使用该状态数据来执行任务,并且可以为以后记住信息。

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

让我们转到一个汽车工厂的例子

汽车厂是一流的。car类有一个类方法buildCar。buildCar方法获取参数,这些参数告诉汽车应该是什么颜色,发动机应该有多大,它应该有什么选项,等等。你向汽车工厂(类)发送了一条buildCar消息,它创建并返回该类的一个实例(汽车工厂为你造了一辆车并给你。)

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

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

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

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

这不是一个优势问题。这就像是在问用锤子而不是锯是否有什么好处。这个问题纯属无稽之谈;你用锤子锤击,用锯子锯。

您使用实例方法来处理与类的实例相关的事情。将类方法用于与整个类相关的事情。

最新更新