サーチ…


前書き

Objective-Cランタイムの一部としてiOS 3.1で初めて導入された関連オブジェクトは、既存のクラスオブジェクトにインスタンス変数を追加する方法を提供します(サブクラス化することによって)。

つまり、サブクラス化せずに他のオブジェクトに任意のオブジェクトをアタッチすることができます。

構文

  • void objc_setAssociatedObject(idオブジェクト、void * key、id値、objc_AssociationPolicyポリシー)

  • id objc_getAssociatedObject(idオブジェクト、void * key)

  • void objc_removeAssociatedObjects(idオブジェクト)

パラメーター

Param 詳細
オブジェクト変更する既存のオブジェクト
キーこれは基本的に定数メモリアドレスを持つ任意のポインタですが、ここでは計算されたプロパティ(getter)を使用して、
追加したいオブジェクト
ポリシーこの新しいvalueのメモリポリシーは、それが保持されているか、割り当てられているか、コピーされているかなどです。宣言する他のプロパティと同じように

備考

詳細はこちら:

NSHipster

@kostiakoval

キングスココア

基本的な関連オブジェクトの例

SomeClass NSStringオブジェクトを追加する必要があると仮定しSomeClass (サブクラスは使用できません)。

この例では、関連付けられたオブジェクトを作成するだけでなく、カテゴリ内の計算されたプロパティにラップして追加のきちんとした

#import <objc/runtime.h>

@interface SomeClass (MyCategory)
// This is the property wrapping the associated object. below we implement the setter and getter which actually utilize the object association
@property (nonatomic, retain) NSString *associated;
@end

@implementation SomeClass (MyCategory)

- (void)setAssociated:(NSString *)object {
    objc_setAssociatedObject(self, @selector(associated), object,
                             OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

- (NSString *)associated {
    return objc_getAssociatedObject(self, @selector(associated));
}

これでプロパティを使用するのは簡単です

SomeClass *instance = [SomeClass alloc] init];
instance.associated = @"this property is an associated object under the hood";



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow