P367-395 メッセージ送信のパターン
実行ループ
- GUIを持つアプリケーションは必ず実行ループを持つ。
- 各スレッドに実行ループがある。
- 実行ループへのアクセスはNSRunLoop
- メイン以外のスレッドでは自動で自動解放プールは作られない。
タイマオブジェクト
- タイマーを実行ループに登録する。
- 繰り返し操作ができる。
メッセージの遅延実行
- - performSelector: withObject: afterDelay
- キャンセルもできる。
- + cancelPreviousPerformRequestWithTarget: selector: withObject など
デリゲートの話
- デリゲートへのメッセージ送信が実行ループの存在を前提としている事がある。コマンドラインアプリケーションのとき注意。
通知
- 通知オブジェクト、通知センタ、オブザーバー
- 通知キュー
- 非同期ポスト
- 同様の通知を統合する
レスポンダチェーン
- 階層的に配置されたGUI部品間でメッセージが自動的に転送される仕組み。
- キーウインドウ→メインウインドウ→NS(UI)Applicationとメッセージが転送されていく。
メッセージの転送
- -forwardInvocation:
- メソッドが実装されてなかったらコレが呼ばれる。オーバーライドしてこの中で転送する。
- メソッドシグネチャ
- NSMethodSignature
- -methodSignatureForSelector:
- コレも再定義する必要がある。
- -respondsToSelector
- コレも再定義した方がよい。
- メッセージの使用禁止
- -doesNotRecognizeSelector:で使用を禁止できる。(例外を発生させる)
- [self doesNotRecognizeSelector:_cmd]; //このように
アンドゥ機構
- NSUndoManager
- 便利そう
面白かった。通知の非同期ポスト、メッセージ転送、メッセージ使用禁止、アンドゥどれも知らなかった。そして便利そうだ。
デリゲートの話は既に理解済みの内容だった。よく使うからね。
- 作者: 荻原剛志
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2011/12/28
- メディア: 大型本
- 購入: 14人 クリック: 85回
- この商品を含むブログ (13件) を見る