1日30分英語

習慣化するために

P367-395 メッセージ送信のパターン

実行ループ

  • GUIを持つアプリケーションは必ず実行ループを持つ。
  • 各スレッドに実行ループがある。
  • 実行ループへのアクセスはNSRunLoop
  • メイン以外のスレッドでは自動で自動解放プールは作られない。

タイマオブジェクト

  • タイマーを実行ループに登録する。
  • 繰り返し操作ができる。

メッセージの遅延実行

  • - performSelector: withObject: afterDelay
  • キャンセルもできる。
    • + cancelPreviousPerformRequestWithTarget: selector: withObject など

デリゲートの話

  • デリゲートへのメッセージ送信が実行ループの存在を前提としている事がある。コマンドラインアプリケーションのとき注意。

通知

  • 通知オブジェクト、通知センタ、オブザーバー
  • 通知キュー
    • 非同期ポスト
    • 同様の通知を統合する

レスポンダチェーン

  • 階層的に配置されたGUI部品間でメッセージが自動的に転送される仕組み。
  • キーウインドウ→メインウインドウ→NS(UI)Applicationとメッセージが転送されていく。

メッセージの転送

  • -forwardInvocation:
    • メソッドが実装されてなかったらコレが呼ばれる。オーバーライドしてこの中で転送する。
  • メソッドシグネチャ
    • NSMethodSignature
  • -methodSignatureForSelector:
    • コレも再定義する必要がある。
  • -respondsToSelector
    • コレも再定義した方がよい。
  • メッセージの使用禁止
    • -doesNotRecognizeSelector:で使用を禁止できる。(例外を発生させる)
    • [self doesNotRecognizeSelector:_cmd]; //このように

アンドゥ機構

  • NSUndoManager
    • 便利そう

面白かった。通知の非同期ポスト、メッセージ転送、メッセージ使用禁止、アンドゥどれも知らなかった。そして便利そうだ。
デリゲートの話は既に理解済みの内容だった。よく使うからね。

詳解 Objective-C 2.0 第3版

詳解 Objective-C 2.0 第3版