【问题标题】:Difference Class and Instance Methods差异类和实例方法
【发布时间】:2011-03-15 18:46:35
【问题描述】:

类方法和实例方法有什么区别。为什么我们需要单独使用它们? 谁能解释一下?

类和实例方法

• 实例响应实例方法

 - (id)init;
 - (float)height;
 - (void)walk;

• 类响应类方法

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

泰米尔

【问题讨论】:

标签: objective-c methods conventions


【解决方案1】:
  1. 使用静态变量
  2. 用'+'符号表示
  3. 可以直接用类调用而无需创建类的实例
  4. 类方法中的 self 表示类本身,但实例方法中的 self 表示类的特定实例。

【讨论】:

    【解决方案2】:

    一个例子:

    Human -> Class You -> Instance

    Human 可以extinguishyou 不能。 You 可以 drink a CokeHuman 不能。

    Instance方法只适用于个人,

    Class方法应用于具有相同可识别特征的整个组。

    这是一个与多个、个人与整个社会的区别。

    [SomeClass alloc] 表示该类的新实例诞生 就像你生下来一样,

    init适用于Instance,就像你父母给你起名字,喂你送你上学,这样你就有了在这个社会生活的技能。

    【讨论】:

      【解决方案3】:

      实例方法只在类的实例上可用,而类方法不需要实例但在类上可用。

      类方法用+ 表示,而实例方法在其返回类型之前用- 表示。

      我们以NSObject 为例。 NSObject 有一个名为 + (id)alloc 的类方法。 alloc 方法用于分配类的实例。显然 alloc 必须是一个类方法,因为如果它是一个实例方法,你会从哪里获得“根”实例?

      另一方面,- (id)init 是一个实例方法,因为它初始化实例的状态。

      【讨论】:

      • 很好的答案,用问题中包含的代码示例来澄清。如果你问班上它是什么高度[人高],它没有答案,因为一个人可以是任何高度。但是如果你问一个实例说 [michael height] 它可以响应,因为我可以为那个特定实例(人)设置一个高度。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-03
      • 2018-01-15
      • 2013-06-12
      • 1970-01-01
      相关资源
      最近更新 更多