preload
6月 17

Objective-C のクラスでクラスメソッドとインスタンスメソッドの定義 ・ 実装は、

+ foo;
+ foo() {

}

- bar;
- bar() {

}

となる。

クラスメソッドは静的なメソッドでインスタンスを生成せずに直接コールできる。
他言語の static な function と同義。当然メンバ変数は使えない。

id hoge = [ NSString alloc ];

インスタンスメソッドはその名の通りインスタンスを生成してからそのインスタンスに対してコールできる。

hoge = [ hoge init ];

Tagged with:
6月 17

name って名前の NSString インスタンスを作って遊ぶ。

NSString *name; // name 変数を NSString ( 文字列 ) クラスの型として定義。オブジェクト用変数 ( インスタンス ) はポインタで。
name = [ NSString alloc ]; // name に NSString を生成。メソッドを呼ぶ場合はインスタンス名の後ろにスペース空けてメソッド名。
name = [ name init ]; // name を初期化。 init メソッドはどうやらインスタンス自身を初期化したインスタンスを返す模様。
name = @”mako”; // name インスタンスに文字列定数 “mako” のアドレス ( @ ) を指定。文字列定数 “mako” の実体は NSString 型としてどこかメモリ上にあるらしい。回りくどい。
NSLog( @”中身 : %@ / 長さ : %d”, name, [ name length ] ); // NSLog は printf() みたいなもの。インスタンスを出力 ( 他の言語で言う toString とかみたいなもの ? ) できる “%@” が使える。他のフォーマットとかはこことか参照。
NSLog( @”%d”, [ name compare: @"mako" ] ); // メソッドの引数は ” : ” で連結。 [ name xxx: @"foo": keyword1 @"bar": keyword2 @"hoge" ... ]; みたいな。

ちなみにオブジェクト操作を示す “[ ... ]” は、その結果がオブジェクトであればネストできる。
例えば上記のサンプルコードだと、

NSString *name;
name = [ [ NSString alloc ] init ];

って感じで。

ちなみに、 型を指定しないインスタンスも作れるみたい。

id name; // id がバリアント型 ( って Objective-C でも言うのか ? ) インスタンス。たぶんこの後に alloc した時点で型が確定するの

だろう。あんまり使いたくないし、使う理由も無いと思うけど。

あと、生成したオブジェクトを解放するのは、


[ name release ];

だそうな。これの管理がどうなってるかはこのへん参照。蛇足だけど自動的に解放するよう宣言する事もできる。


name = [ [ [ NSString alloc ] init ] autorelease ];

Tagged with: