こんにちは、yusuke#9です。

今回はObjective-Cオブジェクト指向についてまとめます。
まとめたいことがたくさんあるのに、ちょっとしたことでも
まとめだすと結構なボリュームになってしまうので、
ビビってます。。。

Objective-Cというのは、iPhoneアプリの開発に使う言語なのですが、
その名の通り、オブジェクト指向的なC言語だな、って思います。
C言語というのは、一番機械語に近い記述ができるプログラミング言語、だと
思っているのですが、違いますかね。あまり他いろいろ知らないもので。。。
とにかく、JavaとかActionScriptなんかよりずっと、iPhoneに近いところで
作ってるのかな、って思ってます。

で、オブジェクト指向というのは、モノに例えるとかなんとか、
いろんなところでいろんなことをいわれていますが、
要するに、構造体と処理をセットにしたものだと思ってます。
構造体というのは、パラメータの集合体で。。。
この辺はもう、C言語の世界なのでちょっと説明しきれないので飛ばします。

$iPhoneでゲームとか作ってます-たしざんクラス
例:たしざんクラス


要するに処理をしつつ、自分の状態も記憶できるので、とっても
優秀でいい子なのです。


オブジェクト指向では、あるオブジェクトに対して、その設計を定義
したものをクラスといい、クラスを実体化したものをオブジェクト
いいます。作る時は、まずクラスの定義を記述して、その処理の中でクラス
を実体化する記述をするわけです。実体化するというのは、メモリ上に
そのオブジェクトの使う領域を確保する、ということです。

と、ここまでが前振りです。(長・・・)
それでは、本題。
Objective-Cでの記述について説明します。
実際に何か例があったほうがいいので、先ほどの足し算クラスを作ってみましょう。

まず、左のファイルの一覧でClassesフォルダを選択した状態で、
"command + N"を押します。
ダイアログが出てくるので、Objective-C classを選択、Subclass ofのプルダウン
NSObjectにして次へを押す。

ファイル名を指定。"Tashizan"と入力し完了
Classesフォルダ内にTashizan.hTashizan.mができています。

まず、.hに手を入れます。
.hは処理を書かず、変数とメソッドの宣言をします。メソッドというのは
処理を行う関数です。

@interface Tashizan : NSObject {
int value; // 追加(変数宣言)
}

- (void)start:(int)v; // 追加(メソッド宣言)
- (void)add:(int)v; // 追加(メソッド宣言)
- (int)result; // 追加(メソッド宣言)


@end

メソッドの宣言は
- (戻り値の型)メソッド名:(引数の型)変数名;

となります。

次に、.mにメソッド宣言した3つのメソッドの実際の処理を書きます。

@implementation Tashizan

- (void)start:(int)v{
value = v; // 最初の値を設定
}

- (void)add:(int)v{
value = value + v; // 送られてきた値を足す
}

- (int)result{
return value; // 結果を返す
}


@end


valueは、.hで宣言したオブジェクト変数です。ここには値が残っています。
この変数valueに対しての処理を記述します。
メソッドの書き方は
- (戻り値の型)メソッド名:(引数の型)変数名{
処理
...
}

です。
これでクラス定義完成です!

では、これを実体化して使うところを作りましょう。
記述するのは、**AppDelegate.hと.mです。

まず、.h

#import <UIKit/UIKit.h>
#import "Tashizan.h" // ここに1行追加

#importのところに1行追加。作ったTashizanクラスを読み込みます。

そして、.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

// Override point for customization after application launch.

// ここから
Tashizan* tashi = [[Tashizan alloc] init]; //1
[tashi start:1]; //2
[tashi add:5]; //3
[tashi add:4]; //4
[tashi add:7]; //5
[tashi add:8]; //6
NSLog(@"result = %d", [tashi result]); //7
[tashi release]; //8
// ここまで追加

[self.window makeKeyAndVisible];

return YES;
}


まず、1行目でオブジェクトを生成します。allocはメモリの割り当て、
initはオブジェクトの初期化をします。
ここで、Objective-Cのメソッドの呼び出しについて説明します。
メソッドは
[オブジェクト メソッド名:引数]

で呼び出します。
ちなみに、引数が2個以上の場合は
[オブジェクト メソッド名:引数 パラメータ名:引数 パラメータ名:引数 ...]

引数がない場合は
[オブジェクト メソッド名]

となります。

Tashizan* となっているのは、変数tashiがメモリ上の割り当てられた場所を
持っていることを示しています。参照ってやつです。Objective-Cでは、
オブジェクトの実体を変数に持つことはできません。
img

オブジェクトを生成したあとは、順次、値を設定し、足して、結果を取得していきます。
この場合、画面上に

2010-12-26 13:13:44.289 test101225[1157:207] result = 25

とでればOKです。

最後に、もう変数は必要ないのでメモリから解放します。それが8行目のreleaseです。
このメモリの解放についてはそのうち説明します。
わかればそれほどでもないのですが、ちょっとめんどくさいです。
あと、とっても重要です。

では。今回はここまで。

その他のこまかいこと↓
$iPhoneでゲームとか作ってます-こまかいこと