【问题标题】:is there any advantage when use class method instead of instance method? [duplicate]使用类方法而不是实例方法有什么好处吗? [复制]
【发布时间】:2016-03-27 07:18:33
【问题描述】:

使用类方法代替实例方法有什么好处吗? 对于 Objective-c:

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


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

【问题讨论】:

标签: ios


【解决方案1】:

我的解释有点不同。

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

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

让我们以汽车厂为例

汽车厂就是阶级。汽车类有一个类方法 buildCar。 buildCar 方法接受参数,这些参数告诉汽车应该是什么颜色、引擎应该有多大、应该有哪些选项等。你向汽车工厂(类)发送了一个 buildCar 消息,它创建并返回一个实例那个班(汽车厂给你造了一辆车,然后给你。)

创建汽车后,该特定汽车的状态变量会存储诸如收音机的频道、油箱中剩余的汽油量、里程表上的里程(“公里”?)、磨损等信息刹车水平等。不同的汽车对这些变量有不同的值。

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

但是,问汽车厂油箱里有多少油是没有意义的。汽车厂没有油箱。但是,您可以向汽车工厂询问它可以制造的汽车类型以及这些汽车的选择。那是对那家汽车工厂始终适用的静态信息。

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

【讨论】:

    【解决方案2】:

    这不是优势问题。这就像问使用锤子而不是锯子是否有任何优势。这个问题是无稽之谈;您使用锤子进行锤击,使用锯子进行锯切。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      • 2016-06-11
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多