What is the + implementation of methods?
Possible Duplicate:
What do the plus and minus signs mean in Objective C next to a method?
自从我在目标C中开始编程以来,我一直在实现如下方法:
最近,我在一段源代码中看到了这一点:
+和-之间的区别是什么?什么是+?
以+开头的方法是类方法;也就是说,它们不是在实际对象(类的实例)上调用的,而是在类本身上调用的。
- 那么,如果对类本身而不是对象调用它,有什么区别呢?
- @coreCode不能调用类上的实例方法。要使用这些方法,需要类的实例。
- 实例方法是在对象上调用的;也就是说,当两个实例中的数据结构的值不同时,它们对于同一类的每个实例的行为都可能不同。但是在一个特定的类上调用类方法时,类方法总是做同样的事情(对于给定的相同参数,如果没有与该方法相关的静态变量被修改)。
- @h2co3最后一句不正确。如果类方法修改了一个静态字段,则在该方法的每次执行中可能不会得到相同的结果,即使参数相同。
- @Stefanh更正,编辑。
- 为了技术上的正确性,我将指出类是"实际对象"。它们是元类的实例。实际上,这就是类方法的真正含义——它是类的元类的一个实例方法。(不是说新手需要知道所有这些,但仍然如此。)
- 是的,这在技术上是正确的,但是它是Objective-C的一个特性,因为它们的内存布局相似(两个结构都以类is a(或元类)开头),所以可以简单地将(class)强制转换为(id)。然而,在大多数传统的OO语言(如C)中,类不是实例,类方法被称为"静态"方法。
返回类型之前带有"+"的方法表示存在这样一个静态方法(它不存在该类的对象的实例化)。带"-"的方法与单个对象相关。
- 通常,目标C程序员称它们为"类方法",而不是Java中的"静态方法"。
- 是的,我知道……但我是用一种类似的方式说的。事实上,类方法与静态方法一样,例如C语言、Java语言、C++语言等等;