以前のエントリーにタイトルにもある書式がなんのことやらさっぱりだったけど、参考本を進めて行ったら分かった気がしました。
* 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の場合は上のようになります。
セッターの後ろになんか着いていますね。
これは引数です。
ゲッター、セッターの良い実装例があるので下記リンクを参照。
– ゲッター・セッターの良い例
* まとめ
ながながと書きましたが、今日は良い理解ができた感じ。自己満です!
Leave a reply