类方法和实例方法的区别

5
什么是类方法和实例方法?为什么我们需要将它们分开呢? 能否有人解释一下?
类方法和实例方法
• 实例响应实例方法
 - (id)init;
 - (float)height;
 - (void)walk;

• 类响应类方法

 + (id)alloc;
 + (id)person;
 + (Person *)sharedPerson;

泰穆尔

1
可能是Objective-C:类方法与实例方法?的重复问题。 - Georg Fritzsche
3个回答

6
一个实例方法只在类的实例上可用,而一个类方法不需要实例,但可以在类上使用。
类方法以 + 表示,而实例方法在其返回类型之前以 - 表示。
让我们以 NSObject 为例。 NSObject 有一个名为 + (id)alloc 的类方法。alloc 方法用于分配类的实例。显然,alloc 必须是一个类方法,因为如果它是一个实例方法,你从哪里获取“根”实例呢?
另一方面,- (id)init 是一个实例方法,因为它初始化了一个实例的状态。

1
好的回答,可以通过问题中包含的代码示例进行澄清。如果你问一个类它的身高是多少 [Person height],它没有答案,因为一个人可以有任何身高。但是,如果你问一个实例,比如[michael height],它可以回答,因为我可能已经为该特定实例(人)设置了一个身高。 - Michael Behan

5

一个例子:

Human -> You -> 实例

Human 可以 熄灭, you 不能。 You 可以 喝可乐, Human 不能。

实例 方法仅适用于个体,

方法适用于具有相同可识别特征的整个群体。

这是一个人和许多人之间的区别,一个人和整个社会之间的区别。

[SomeClass alloc] 意味着该类的新实例已经创建, 就像你出生一样,

init 应用于一个 实例,就像你的父母给你起了一个名字,喂养你并送你去学校,所以你有能力在这个社会中生存。


0
  1. 使用静态变量
  2. 用“+”符号表示
  3. 可以直接使用类调用,无需创建类的实例
  4. 类方法中的self代表类本身,而实例方法中的self代表该类的特定实例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接