最終更新:2013-01-10 (木) 10:54:00 (4491d)
Objective-C/クラス
Top / Objective-C / クラス
@interface SimpleClass : NSObject{ //独自のインスタンス変数を宣言 } //プロパティを宣言 //メソッドを宣言 @end
クラスの書き方
- ヘッダ(.h)に@interfaceで宣言をして実装は@implementationで.mファイルに行う
クラスの宣言(hoge.h)
- @interfaceでクラスを定義する
@interface HogeObject:NSObject // @interface クラス名:親クラス名 { //変数の宣言 id _hogeValue; //インスタンス変数は _から始めると区別しやすい(推奨) NSString *huga; } //プロパティの宣言 @property NSString *firstName;//インスタンス変数は自動で合成される(Modern Runtime)。 @property NSString *lastName; //メソッドの宣言 //-がインスタンスメソッドで、 //+がクラスメソッド。 -(id) init;//イニシャライザ @end
- 公開しない関数はヘッダに書かなくても良い
- Objective-C にはコンストラクタは存在しない。初期化はイニシャライザ(init)で行う
- 暗黙の変数
クラスの実装(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を使うとインスタンス変数、アクセッサをコンパイル時に合成してくれる。
- Xcode 4.4以降だと@synthesizeも@dynamicも書かなかった場合には@synthesizeを付けたのと同じ扱いとなる
使い方
宣言
クラス名* オブジェクト名 = [[クラス名 alloc] 初期化命令];
メソッドの呼び出し
- 何か処理を呼ぶ時は関数呼び出しという形ではなく、メッセージという形でオブジェクト同士のやり取りを行う。
[オブジェクト名 メッセージ];
- 実装されていなければ何も起きない。
開放
[オブジェクト名 release];
メモ
- オブジェクトが属するクラスは実行時に決まるので、インスタンスを生成し、あるいは操作する際、どの型の変数に代入しても、何の違いも生じない。
- オブジェクトを指すポインタの初期値を指定しなければ、コンパイラが自動的に、nilに初期化