1日30分英語

習慣化するために

P263-285 カテゴリ

カテゴリ

  • 局所的なカテゴリ
    • インターフェースに書いてない局所的メソッドが、定義より前方のコードで使えない問題で、メソッドの順番を逆にしたりしても無理な場合を解消できる。
    • ソースファイルの先頭に@interface クラス名(XXXXX), @implementation クラス名(XXXXX){}と書いて実装する。
  • プライベートなメソッド
    • 非公開なカテゴリで実現するクラス外部に非公開なメソッド。(←実装ファイル内に局所的に書くメソッドと同じようなもん?)
    • メインのインターフェース部がそのカテゴリのインターフェースを参照する必要あり。
  • クラスエクステンション
    • カテゴリ名を指定しない。
    • インスタンス変数を作成できる。クラス本体の実装部で宣言したインスタンス変数はそのファイルの中でしか使えないが、コレだと違うカテゴリ内で使える。
    • メインの方でクラスエクステンションのメソッドが実装してなかったらコンパイルエラーになる。
  • 宣言プロパティ
    • カテゴリの実装部に@synthesizeを含める事はできない。
    • カテゴリの宣言にプロパティを含める場合はアクセサを書く必要がある。
  • 既存のメソッドの上書きが可能(ややこしくなる)
  • static char prevKey; ←コレで他のカテゴリがこの変数のアドレスを使う事はない。らしい。staticをつける。

連想参照

  • あるオブジェクトに対して、別のオブジェクトへの参照を追加する事ができる。これはスゴい。
    • objc_setAssociatedObject(id object, void *key, id value, objc_AssociationPolicy policy);
    • objc_getAssociatedObject(id object, void *key);
    • objc_removeAssociatedObject(id object); コレは使うの危ない。setでnilを渡して個別に解除すべし。

可変個の引数を取るメソッドの宣言について

  • 引数の所で:(NSString *)str, ...NS_REQUIRES_NIL_TERMINATION;と書くと、引数の最後がnilじゃないときに警告してくれる。

メソッドをプライベートにしたりとかやった事がないのでピンとこなかったが、重要なことだな。
連想参照とか、メチャ便利ですね。カテゴリと組み合わせるとかなりの威力を発揮できるみたいです。

詳解 Objective-C 2.0 第3版

詳解 Objective-C 2.0 第3版