最終更新:2013-01-10 (木) 10:54:00 (4124d)  

Objective-C/クラス
Top / Objective-C / クラス

@interface SimpleClass : NSObject{
//独自のインスタンス変数を宣言
}
//プロパティを宣言
//メソッドを宣言
@end

クラスの書き方

クラスの宣言(hoge.h)

  • @interfaceでクラスを定義する
    @interface HogeObject:NSObject
    // @interface クラス名:親クラス名
    {
        //変数の宣言
        id _hogeValue;   //インスタンス変数は _から始めると区別しやすい(推奨)
        NSString *huga;
    }
    //プロパティの宣言
    @property NSString *firstName;//インスタンス変数は自動で合成される(Modern Runtime)。
    @property NSString *lastName;
    
    //メソッドの宣言
    //-がインスタンスメソッドで、
    //+がクラスメソッド。
    -(id) init;//イニシャライザ
    @end

クラスの実装(hoge.m)

  • @implementation でクラスを実装する
    #import "hoge.h"
    @implementation HogeObject
    //@propertyに対応する@synthesizeを書かなくても自動でアクセサが合成される (Xcode 4.4~)
    
    //イニシャライザ
    - (id)init {
        [super init];
        //ここで初期化
        return self;
    }
    @end

アクセッサ

  • Obj-Cでは、すべてのメンバ変数はprivate(参照できるけど・・)。メンバ変数にアクセスする場合はアクセッサ(getter、setter)を使う。
    • setterはsetXXX
    • getterはXXX(get~にしない)
  • とする。
  • 下記のプロパティを使って合成(自動実装)することがほとんど。

Objective-C/プロパティ

  • 変数ごとにいちいちアクセッサかいてたら面倒なので、プロパティ(@property)というのがある。
  • @propertyを使うとインスタンス変数、アクセッサをコンパイル時に合成してくれる。

使い方

宣言

  • クラス名* オブジェクト名 = [[クラス名 alloc] 初期化命令];

メソッドの呼び出し

  • 何か処理を呼ぶ時は関数呼び出しという形ではなく、メッセージという形でオブジェクト同士のやり取りを行う。
    [オブジェクト名 メッセージ];
  • 実装されていなければ何も起きない。

開放

  • [オブジェクト名 release];

メモ

  • オブジェクトが属するクラスは実行時に決まるので、インスタンスを生成し、あるいは操作する際、どの型の変数に代入しても、何の違いも生じない。
  • オブジェクトを指すポインタの初期値を指定しなければ、コンパイラが自動的に、nilに初期化

既存のクラスのカスタマイズ

Objective-C/カテゴリ

クラス拡張