Suche…


Einführung

Zunächst in iOS 3.1 als Teil der Objective-C-Laufzeit eingeführt, bieten verknüpfte Objekte eine Möglichkeit, Instanzvariablen zu einem vorhandenen Klassenobjekt hinzuzufügen (ohne Unterklassifizierung).

Dies bedeutet, dass Sie jedes Objekt ohne Unterklassifizierung an jedes andere Objekt anhängen können.

Syntax

  • void objc_setAssociatedObject (id-Objekt, void * key, id-Wert, objc_AssociationPolicy-Richtlinie)

  • id objc_getAssociatedObject (id-Objekt, ungültiger * Schlüssel)

  • void objc_removeAssociatedObjects (ID-Objekt)

Parameter

Param Einzelheiten
Objekt Das vorhandene Objekt, das Sie ändern möchten
Schlüssel Dies kann grundsätzlich jeder Zeiger sein, der eine konstante Speicheradresse hat, aber es ist eine gute Praxis, hier eine berechnete Eigenschaft (Getter) zu verwenden.
Wert Das Objekt, das Sie hinzufügen möchten
Politik Die Speicherrichtlinie für diesen neuen value dh sollte er beibehalten / zugewiesen, kopiert usw. werden, genau wie bei jeder anderen Eigenschaft, die Sie deklarieren

Bemerkungen

Weitere Details hier:

NSHipster

@kostiakoval

Kingscocoa

Beispiel für ein assoziiertes Basisobjekt

Nehmen wir an, wir müssen Nectring-Objekt zu SomeClass (wir können keine Unterklasse bilden).

In diesem Beispiel erstellen wir ein zugeordnetes Objekt nicht nur, sondern hüllen es in eine Kategorie ein, um die Ordentlichkeit zu erhöhen

#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));
}

Nun wäre es so einfach, die Immobilie zu nutzen

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow