iOS
Obiekty powiązane z celem C
Szukaj…
Wprowadzenie
Po raz pierwszy wprowadzone w iOS 3.1 jako część środowiska wykonawczego Objective-C, powiązane obiekty zapewniają sposób dodawania zmiennych instancji do istniejącego obiektu klasy (bez podklasy).
Oznacza to, że będziesz mógł dołączyć dowolny obiekt do dowolnego innego obiektu bez podklasy.
Składnia
void objc_setAssociatedObject (obiekt id, klucz void *, wartość identyfikatora, polityka objc_AssociationPolicy)
id objc_getAssociatedObject (obiekt id, klucz void *)
void objc_removeAssociatedObjects (obiekt id)
Parametry
Param | Detale |
---|---|
obiekt | Istniejący obiekt, który chcesz zmodyfikować |
klucz | Zasadniczo może to być dowolny wskaźnik, który ma stały adres pamięci, ale dobrą praktyką jest użycie tutaj obliczonej właściwości (gettera) |
wartość | Obiekt, który chcesz dodać |
polityka | Polityka pamięci dla tej nowej value tj. Czy należy ją zachować / przypisać, skopiować itp., Podobnie jak każdą inną właściwość, którą zadeklarujesz |
Uwagi
Przykład podstawowego obiektu powiązanego
Załóżmy, że musimy dodać obiekt NSString do SomeClass
(nie możemy podklasy).
W tym przykładzie nie tylko tworzymy powiązany obiekt, ale również zawijamy go do obliczonej właściwości w kategorii w celu zapewnienia dodatkowego porządku
#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));
}
Teraz korzystanie z tej właściwości będzie tak proste
SomeClass *instance = [SomeClass alloc] init];
instance.associated = @"this property is an associated object under the hood";