クラスメソッド
クラスメソッドは、クラスのインスタンスではなく、クラスオブジェクトを操作するメソッドです。Objective-C では、クラスメソッドは、メソッドの宣言と実装の最初にプラス記号(+)を付けてで示されます。
+ (void)classMethod;
クラスにメッセージを送信するには、メッセージ表現のレシーバとしてのクラスの名前を入れます:
[MyClass classMethod];
サブクラス
メソッドを宣言したクラスのサブクラスにクラスメッセージを送信できます。たとえば、NSArray は配列オブジェクトの新しいインスタンスを返すクラスメソッド array を宣言します。また NSArray のサブクラスである NSMutableArray で、メソッドを使用することもできます。
NSMutableArray *aMutableArray = [NSMutableArray array];
この場合、新しいオブジェクトは NSMutableArray のインスタンスで、NSArray のインスタンスではありません。
インスタンス変数
クラスメソッドは、インスタンス変数を直接参照することはできません。たとえば、以下のクラス宣言があるとします:
@interface MyClass : NSObject { NSString *title; } + (void)classMethod; @end
classMethod の実装内で title を参照することはできません。
self
クラスメソッドの本体内で、self はクラスオブジェクトそのものを参照します。以下のようなファクトリメソッドを実装する場合があります:
+ (id)myClass { return [[[self alloc] init] autorelease]; }
このメソッドでは、self はメッセージが送信された先のクラスを参照します。MyClass のサブクラスを作成した場合:
@interface MySubClass : MyClass { } @end
そして、サブクラスに MyClass のメッセージを送りました:
id instance = [MySubClass myClass];
実行時には、MyClass メソッドの本体内で、self は MySubclass クラスを参照することになります(そのためメソッドは、サブクラスのインスタンスを返します)。
前提条件の記事
(なし)
関連記事
既出の議論
クラスの定義
次の章
前の章