iOS
Objective-C Zugeordnete Objekte
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
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";