他の人が言ったように、これを行う方法は連想参照を使用することです。それらは、値/キー ペア パラダイムと同じよう CALayer
に実装されます..基本的に..あらゆる「プロパティ」または「もの」と「関連付ける」ことができます…</p>
したがって、カテゴリ ヘッダーで…値を読み取るだけの場合は…
@property (読み取り専用) NSString *uniqueID;
次に、ゲッターを記述します…</p>
- (NSString*) uniqueID { return @"You're not special"; }
しかし、たとえば..ゲッター内から値を思いつくことはできません..外部セッター用のストレージが必要です...または使用するクラス独自の実装...次のようなセッターを作成する必要があります...
- (void) setUniqueID:(NSString*)uId
公開する必要はありませんが、ここで「魔法」が起こります。
…
[self setAssociatedValue:uId forKey:@"yourInternalStorageName"
policy:OBJC_ASSOCIATION_RETAIN_NONATOMIC];
これを見た後、これらの値の設定や取得などを容易にするためにいくつかの「個人用カテゴリ」を使用していることに気付きました..非常に便利なので、この要点に投稿しました.. …のような小さな宝石</p>
- (id) associatedValueForKey:(NSString*)key
orSetTo:(id)anObject
policy:(objc_AssociationPolicy) policy;
「理解」の秘訣は「ポリシー」の部分です。これらの値は…</p>
OBJC_ASSOCIATION_ASSIGN = 0,
OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1,
OBJC_ASSOCIATION_COPY_NONATOMIC = 3,
OBJC_ASSOCIATION_RETAIN = 01401,
OBJC_ASSOCIATION_COPY = 01403
「通常の」宣言でプロパティを説明するときに表現されるのと同じ「個性」特性を捉えます。同じルールで値を「保存」する方法をコンパイラに指示する必要があります。