ついんむーん

iOS開発 / 主婦で産休中 /

Objective-cのクラスの概念

objective-cを書いていて1年くらい経ちますが...

未だにクラスメソッドインスタンスメソッドの使い分けに自信が無いです。

クラスを更に考える(1/8):初心者のためのObjective-Cプログラミング入門

クラスメソッド

  •  + (void) classMethod;
  •  - (void) instanceMethod; てきな感じて、+,-でかき分けています。

何が違うのかっていうと クラスメソッドはallocしなくてもメソッドを呼ぶことができるんです。

っていうことはメソッドを呼ぶ時に

TestClass *tClass = [TestClass alloc] init];

[tClass testMethod];

ではなく

[TestClass testMethod];

で呼べるのです。

だったら全部クラスメソッドでいいじゃん(初心者的思考)

しかし、制約があります

リンク先にもあるよう、原則クラスメソッドだけで完結するようなものでなければいけないのです。

クラスから直接インスタンスメソッドを呼び出すこともできません。つまりクラスメソッドは、クラスメソッドだけで完結するような形で作成されることになります。そう考えると、用途はだいぶ限定されると言っていいでしょう。

つまり

+ (void) classMethod {
    [self instanceMethod];
}

- (void) instanceMethod {
    ...

}

というような使い方はできないのですね。

使いどころをまだまだ極められませんが。。。

これからも勉強を続けます!!