【问题标题】:What is the + implementation of methods? [duplicate]方法的+实现是什么? [复制]
【发布时间】:2025-12-12 06:50:01
【问题描述】:

可能重复:
What do the plus and minus signs mean in Objective C next to a method?

自从我开始使用 Objective C 编程以来,我一直在实现这样的方法:

-(void)doSomething

最近在一段源码中看到了这个:

+(void)doSomething

+和-有什么区别,+是什么?

【问题讨论】:

  • 实例方法以-开头,类方法以+

标签: objective-c methods


【解决方案1】:

以+开头的方法是类方法;也就是说,它们不是在实际对象(类的实例)上调用,而是在类本身上调用。

【讨论】:

  • 那么如果在类本身而不是对象上调用它有什么区别?
  • @CoreCode 你不能调用类的实例方法。您需要一个类的实例才能使用这些方法。
  • 在对象上调用实例方法;也就是说,当两个实例中的数据结构的值不同时,它们对于同一类的每个实例的行为可能不同。但是当在一个特定的类上调用时,类方法总是会做同样的事情(对于给定的相同参数,并且如果没有修改与该方法相关的静态变量)。
  • @H2CO3 最后一句不正确。如果类方法修改了一个静态字段,那么即使使用相同的参数,每次执行该方法时可能都不会得到相同的结果。
  • 为了技术上的正确性,我会指出类“实际对象”。它们是它们的元类的实例。事实上,这就是类方法的真正含义——它是类元类的实例方法。 (并不是说新手需要知道所有这些,但仍然需要。)
【解决方案2】:

返回类型前带有“+”的方法表示存在这样的静态方法(它存在没有实例化该类的对象)。带有“-”的方法与单个对象相关。

【讨论】:

  • Objective C 程序员通常称它们为“类方法”,而不是 Java 中的“静态方法”。
  • 是的,我知道..但我以类似的方式说。其实类方法和c#、java、c++等静态方法是一样的;-)
最近更新 更多