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:  

2 Responses to Objective-C の基本的なオブジェクトの扱い方とか。

  1. jbk より:

    型なしのidはよくつかう、というかObjective-C的にはメッセージパッシングが重要なので、どちらかというと型の無い言語のダックタイピングなようなイメージのほうがいい気がするお。

    あと、iPhone上でもGC使えなかったっけ?

  2. mako より:

    >> 自爆王
    > メッセージパッシング重視なダッグタイピング
    んー… ?
    Objective-C のメソッドは定義されている型以外を返す事が基本なの ?
    じゃなければ普通にメッセージ送る時点でメソッドの定義は判ってる筈だから戻ってくるメッセージの型も自然と定義出来るんじゃね ? と思うのだが。いやまあ他の言語でも成功したらインスタンス、失敗したら bool 値 false とか往々にありますけれども、基本的には C 言語の構文上で OOP くっつけた派生言語としては定義に沿ったメッセージを返してくれないと気持ち悪いなあ ( あくまでぼくポリシー ) 。いやまあそうは言っても実際 id じゃなきゃだめなときが多いんだろうけど、型定義出来る所は極力厳密に行きたいって事ですよ。

    > iPhone OS で GC
    OSX Cocoa の GC みたいなのを考えてるならそれはないよ。エントリーでも書いた autorelease メッセージが iPhone 上での事実上の GC みたい。

コメントを残す

メールアドレスが公開されることはありません。