Jak wiemy, możemy dodać zmienną w Objective-C używając metod kategorii i runtime, takich jak objc_setAssociatedObject
i objc_getAssociatedObject
. Na przykład:Jak działa objc_setAssociatedObject?
#import <objc/runtime.h>
@interface Person (EmailAddress)
@property (nonatomic, readwrite, copy) NSString *emailAddress;
@end
@implementation Person (EmailAddress)
static char emailAddressKey;
- (NSString *)emailAddress {
return objc_getAssociatedObject(self,
&emailAddressKey);
}
- (void)setEmailAddress:(NSString *)emailAddress {
objc_setAssociatedObject(self,
&emailAddressKey,
emailAddress,
OBJC_ASSOCIATION_COPY);
}
@end
Ale czy ktoś wie, co robi objc_getAssociatedObject
lub objc_setAssociatedObject
zrobić? Mam na myśli, gdzie są przechowywane zmienne, które dodajemy do obiektu (tutaj jest self
)? A związek między zmienną a self
?
Każdy powód nie tylko korzystania z nieruchomości? Próbowałbym nie zadzierać z runtime bez zrozumienia, jak to działa. –
[Tutaj jest] (http://www.opensource.apple.com/source/objc4/objc4-532/runtime/objc-runtime.mm) ich implementacja. –
@ H2CO3, plik z naprawdę interesującym kodem to objc-references.mm: http://www.opensource.apple.com/source/objc4/objc4-532/runtime/objc-references.mm –