カスタム検索

2008年12月14日日曜日

いまさら聞けない「Objective-C」超入門

というわけでObjective-Cはじめます。初心忘れるべからず。

・はじめに Objective-Cとはなんじゃらほい
 C言語にオブジェクト指向の機能を追加した言語
 MacOSX上で動作する言語、それ以外ではあまり使われない。iPhoneのアプリもObjective-Cで作成する 。
 C++もCにオブジェクト指向を追加した言語だが、Objective-Cとは別路線で互換性は無い
 Objective-Cの特徴としては、際立って柔軟性が高く、効率的なコードを書く事が出来るらしい
 Leopardの登場とあわせてObjective-C2.0(ガベージコレクション、宣言プロパティ、高速列挙を追加)が公開&実装された



なんとなく概要がわかった所でまずは触ってみよう

//オブジェクトは id という特殊な型
id obj

//オブジェクトにメッセージを送る(オブジェクトのメソッドを実行する?)
//この形をメッセージ式と呼ぶ。
[obj msg]

//objのmsgを呼び出した結果が戻り値となる
//以下のように、戻り値を使って別のメッセージを呼ぶ事も出来る
[[obj msg] msg2];
[[[obj msg] msg2] msg3];

// [] は配列としても使う、左側にあるもので自動的に判別される
array=[1,2,3]; // 配列の定義
el=test[[obj msg]]; // test配列の添字として [obj msg] の返り値を使う

//メッセージに引数が必要な場合はコロンを付ける
[obj msg:'yossy']

//メソッド一覧はメッセージセレクタと呼ばれる
//コロンの有無でも別のセレクタとして認識される
//コロンが引数的なキーワード
copy
copy:
delete
allDelete
create
findBookName:Author:

//クラスのインスタンス化
[クラス名 alloc]

//通常はinitするべし
//initがデフォ、initからはじまるメソッドでも良い
[[クラス名 alloc] init]

//インターフェースの作成
@interface Hello:NSObject
{
//インスタンス変数の宣言
}
// メソッドの宣言
- (id)delegate;
- (id)cellAtRow:(int)row column:(int)col;

@end

// this は self と表現される
//文字列を扱うのはちょっと面倒?
//とりあえず入門書に従って数値をいじるクラスが出来た・・・今日はタイムアップなり
// XCodeで新規Cocoaアプリケーション、mainに全部かきかき



#import

@interface Hello : NSDocument {
int val;
int min,max,step;
}
- (id)initWithMin:(int)a max:(int)b step:(int)s;
- (int)value;
- (id)up;
- (id)down;
@end

@implementation Hello
- (id)initWithMin:(int)a max:(int)b step:(int)s {
self=[super init]; // NSObjectの初期化を呼ぶ
if(self!=nil) { // nilはnullみたいなもん? init が成功していたら
val=min=a;
max=b;
step=s;
}
return self;
}

- (int)value {
return val;
}

- (id)up {
if((val += step) > max) val=max;
return self;
}

- (id)down {
if((val -= step) < min) val=min;
return self;
}
@end

//int main(int argc, char *argv[])
int main(void)
{
id v,w;

v=[[Hello alloc] initWithMin:0 max:10 step:2];
w=[[Hello alloc] initWithMin:0 max:9 step:3];
[v up];
printf("%d %d\n",[v value], [w value]);
[v up];
[w up];
printf("%d %d\n",[v value], [w value]);

// return NSApplicationMain(argc, (const char **) argv);
return 0;
}

0 件のコメント: