iPhoneアプリ作成への道 初歩の初歩 僕は復習するんだの巻

( iPhone )

忠告しておこう。これはただのメモ。

■iPhone OSの4つのレイヤー Cocoa Touch Media Core Services Core OS

上に行くほどUIに近く、遠いほどハードよりなレイヤ。

■application スタイル 生産性型(Productivity) 一覧からそれぞれをタップし、何らかの作業を行っていくもの ユーティリティ型(Utility) 画面遷移もなく単純な機能を提供するもの(天気や地図) 没入型(Immersive) ゲームやメディアプレーヤーのようにスクリーン表示するためのもの

■Objective-C iPhoneアプリ作成時に利用される言語 詳細:http://ja.wikipedia.org/wiki/Objective-C

Cに進んだC++とは異なり、C & Object Systemという考え方であり、ある意味二つの言語が混在した状態にある。プログラマは問題領域に合わせて双方を使い分けることができるため、お互いの利点を活かしやすいのが特徴である。

言語全体としてはCの完全上位互換であり、if/for/whileなどの制御文や、intなどのスカラー型、関数記法、宣言・代入といった基本的な文法はCに準拠する。

一方オブジェクトシステムはSmalltalkの概念をほぼそのまま借用したもので、動的型のクラス型オブジェクト指向ランタイムを持ち、メッセージパッシングにより動作する。このことからしばしば「インラインでCの書けるSmalltalk」または「インラインでSmalltalkの書けるC」などと呼ばれる。

最大の特徴はオブジェクトシステムが完全に動的という点で、実行時のクラス拡張、オブジェクト汎用型idの導入により型によらない動的配列・辞書など、インタプリタに近い記述力をもつことである。実際にコードそのものはネイティブコンパイルされるものの、動作原理はほぼインタプリタに近く、コンパイラ型言語としてはまれな柔軟性を発揮する。

したがって、C側から見れば一種のスクリプトインタプリタが乗っているような状態であり、逆にオブジェクトシステムからはOS機能や膨大なC言語資源を直接利用可能なインターフェースが備わっているといえる。また仮想マシンを持たずに済むため、取り回しも良い。Objective-C特有のこの形態は双方のメリットが明確で、実用面での使い勝手が非常に優れている。この特性に着目したのがNEXTSTEPで、UNIXとの互換性と先進的なオブジェクト指向環境の両立に成功し、その後のOS設計に大きな影響を与えることとなった。

後続言語への影響としては、特にJavaの基礎設計にその姿を見ることができる(SunがOPENSTEPに関わっていたことと関係がある)。

とりあえず、以下の文章もwikipedia引用です

// クラスの定義
@interface MyObject : NSObject {
    int val;
    id obj;
}
 
+ (void)classMethod:(id)arg;  // クラスメソッド
- (id)method:(NSObject*)arg1 with:(int)arg2;  // インスタンスメソッド。arg1は型付き
@end
 
// 実装
@implementation MyObject
+ (void)classMethod:(id)arg {
    // some operation
}
 
- (id)method:(NSObject*)arg1 with:(int)args2 {
    return obj;
}
 
// 典型的なinit
- (id)init {
    self = [super init]; // スーパークラスの呼びだし
    if(self != nil) {
        val = 1;
        obj = [[SomeClass alloc] init];
    }
    return self;
}
 
// deallocは自身のリソースを解放してからスーパークラスに回す
- (void)dealloc
{
    [obj release];
    [super dealloc];
}
@end

こう、なんていうか、いまいちぱっとしないな。この書き方。

慣れるしか無い事実。