以前のエントリーにタイトルにもある書式がなんのことやらさっぱりだったけど、参考本を進めて行ったら分かった気がしました。
* Javaでいうメソッドを呼び出している。
1 |
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; |
↑のダブルパンチ的な書式だけど紐解いて解説をしよう。
** クラスメソッド
Javaで言うところのstaticメソッドの呼び出しみたいなもの。
1 |
[NSAutoreleasePool alloc] |
↑の部分がObjective-Cのクラスメソッド。
書式は・・・
1 |
[クラス名 メッセージ] |
メッセージと書いたがメソッドと理解していいだろう。
クラス名とメッセージの間は半角スペースが入る。
上記のコードでは
– NSAutoreleasePoolクラスのallocメソッドを呼んでいる。
となる。
ちなみにallocはインスタンス生成時に使用するメソッド。
文字列クラスのインスタンスを生成する場合は・・・
1 |
str = [NSString alloc]; |
となる。
** 1つのステートメントの中で連続して実行可能
どういうことかというと、最初にのせた・・・
1 |
[[NSAutoreleasePool alloc] init]; |
の部分。
段階的に説明をすると。
– NSAutoreleasePoolのallocメソッドを呼び実行、インスタンスを生成。
— 戻り値の型はNSAutoreleasePool
– インスタンス生成後initメソッドを呼び実行。
といった感じ。
Javaでいうと・・・
1 2 3 4 |
List<String> list = new ArrayList<String>(); list.add("hoge"); // リストの要素を取得(getメソッドを呼ぶ)しStringクラスのlengthメソッドを実行 list.get(0).length; |
かな。
ステートメント内で連続して実行できるが、あまりにも連続しすぎると可読性は悪くなってしまうので2、3回とかまでの連続がいいような気がする。
Javaでもそんなに連続してメソッドを呼んでいるコードを見た事ない。
* インスタンスメソッド
1 2 3 4 5 |
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; ・ ・ ・ [pool drain]; |
これも以前のエントリーで記載したサンプルコード。
インスタンスメソッドは最後のコード部になる。
書式は・・・
1 |
[インスタンス メッセージ] |
これまたメッセージと書いたがメソッドという理解で良いのではないかと。
それと間にはクラスメソッド同様、スペース。
サンプルコードを紐解くと・・・
– インスタンス名poolのdrainメソッドを呼び実行。
でしょうか。
* 結論
1 2 3 4 5 |
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; ・ ・ ・ [pool drain]; |
このサンプルコードを紐解くと・・・
– NSAutoreleasePoolのインスタンス生成。
— NSAutoreleasePoolクラスでNSObjectをimportしているのインスタンス生成メソッドのallocは呼び出せる。
– インスタンス生成後、initメソッドを呼び実行。初期化を行う。
— initメソッドが呼べるのはNSAutoreleasePoolクラスでNSObjectをimportしているから
といった感じではないかと思います。
間違いあれば指摘を!(ってだれもこのBlogはみてないな・・・orz)
* アクセッサメソッド
Javaでいうゲッター・セッターです。
しかし、文法は独特です。
仮に・・・
– あるクラスにageという変数がある。
– そのクラスのインスタンス名がtaro。
– そしてageには26という数値が格納されている。
この場合のゲッター、セッターは
1 2 3 4 |
// ゲッター [taro age] // セッター [taro setAge:20] |
です。
JavaはgetHoge、setHoge(num)みたいな書式でしたが、Objective-Cの場合は上のようになります。
セッターの後ろになんか着いていますね。
これは引数です。
ゲッター、セッターの良い実装例があるので下記リンクを参照。
– ゲッター・セッターの良い例
* まとめ
ながながと書きましたが、今日は良い理解ができた感じ。自己満です!
Leave a reply