stryhのchangelog

Objective-C – NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];の文法が分かった気がする –

以前のエントリーにタイトルにもある書式がなんのことやらさっぱりだったけど、参考本を進めて行ったら分かった気がしました。
* Javaでいうメソッドを呼び出している。

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

↑のダブルパンチ的な書式だけど紐解いて解説をしよう。
** クラスメソッド
Javaで言うところのstaticメソッドの呼び出しみたいなもの。

[NSAutoreleasePool alloc]

↑の部分がObjective-Cのクラスメソッド。
書式は・・・

[クラス名 メッセージ]

メッセージと書いたがメソッドと理解していいだろう。
クラス名メッセージの間は半角スペースが入る。
上記のコードでは
– NSAutoreleasePoolクラスのallocメソッドを呼んでいる。
となる。
ちなみにallocはインスタンス生成時に使用するメソッド。
文字列クラスのインスタンスを生成する場合は・・・

str = [NSString alloc];

となる。
** 1つのステートメントの中で連続して実行可能
どういうことかというと、最初にのせた・・・

[[NSAutoreleasePool alloc] init];

の部分。
段階的に説明をすると。
– NSAutoreleasePoolのallocメソッドを呼び実行、インスタンスを生成。
— 戻り値の型はNSAutoreleasePool
– インスタンス生成後initメソッドを呼び実行。
といった感じ。
Javaでいうと・・・

List<String> list = new ArrayList<String>();
list.add("hoge");
// リストの要素を取得(getメソッドを呼ぶ)しStringクラスのlengthメソッドを実行
list.get(0).length;

かな。
ステートメント内で連続して実行できるが、あまりにも連続しすぎると可読性は悪くなってしまうので2、3回とかまでの連続がいいような気がする。
Javaでもそんなに連続してメソッドを呼んでいるコードを見た事ない。
* インスタンスメソッド

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
・
・
・
[pool drain];

これも以前のエントリーで記載したサンプルコード。
インスタンスメソッドは最後のコード部になる。
書式は・・・

[インスタンス メッセージ]

これまたメッセージと書いたがメソッドという理解で良いのではないかと。
それと間にはクラスメソッド同様、スペース。
サンプルコードを紐解くと・・・
– インスタンス名poolのdrainメソッドを呼び実行。
でしょうか。
* 結論

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
・
・
・
[pool drain];

このサンプルコードを紐解くと・・・
– NSAutoreleasePoolのインスタンス生成。
— NSAutoreleasePoolクラスでNSObjectをimportしているのインスタンス生成メソッドのallocは呼び出せる。
– インスタンス生成後、initメソッドを呼び実行。初期化を行う。
— initメソッドが呼べるのはNSAutoreleasePoolクラスでNSObjectをimportしているから
といった感じではないかと思います。
間違いあれば指摘を!(ってだれもこのBlogはみてないな・・・orz)
* アクセッサメソッド
Javaでいうゲッター・セッターです。
しかし、文法は独特です。
仮に・・・
– あるクラスにageという変数がある。
– そのクラスのインスタンス名がtaro。
– そしてageには26という数値が格納されている。
この場合のゲッター、セッターは

// ゲッター
[taro age]
// セッター
[taro setAge:20]

です。
JavaはgetHoge、setHoge(num)みたいな書式でしたが、Objective-Cの場合は上のようになります。
セッターの後ろになんか着いていますね。
これは引数です。
ゲッター、セッターの良い実装例があるので下記リンクを参照。
ゲッター・セッターの良い例
* まとめ
ながながと書きましたが、今日は良い理解ができた感じ。自己満です!

URL :
TRACKBACK URL :

Leave a reply

*
*
* (公開されません)

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Return Top