objcの関連参照でUIViewにプロパティを追加してみる。
objectivecの関連参照を試したのでメモ。
UIView拡張で試したサンプル(github)
objcのカテゴリではインスタンス変数の追加はできない。
関連参照をつかえば疑似的に変数を追加できる。
必要な手順。
1. objc/runtime.hのインポート
#import
2. 追加する変数を保持する為のキーの準備 (voidポインタならOK)
// キーの一例
static char showRectKey; // 表示フレーム用のキー
static char hideRectKey; // 非表示フレーム用のキー
3. 関連オブジェクトの設定/クリア
objc_setAssociatedObject関数で設定する。
objectは参照を追加する対象、keyはキー、valueは追加するオブジェクト、policyはretainとか。
関連を解消する時はvalueにnilをセットする。
void objc_setAssociatedObject(id object, void *key, id value, objc_AssociationPolicy policy)
関連オブジェクトの設定例
// 表示フレームの保持 - (void)setShowFrame:(CGRect)inFrame { NSValue *value = [NSValue valueWithCGRect:inFrame]; objc_setAssociatedObject(self, &showRectKey, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC); }
[参考]
UIView拡張で試したサンプル(github)
Objective-Cプログラミング言語_関連参照
詳解Objective-C 2.0 第3版 (アフリエイトリンクです。)