Как мы знаем, мы можем добавить переменную в Objective-C, используя методы категории и времени выполнения, такие как objc_setAssociatedObject
и objc_getAssociatedObject
. Например:Как работает 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
Но кто-нибудь знает, что делает objc_getAssociatedObject
или objc_setAssociatedObject
делать? Я имею в виду, где хранятся переменная, которую мы добавляем к объекту (здесь self
)? И связь между переменной и self
?
Любые причины не только использования имущества? Я постараюсь не вмешиваться во время выполнения, не понимая, как это работает. –
[Здесь] (http://www.opensource.apple.com/source/objc4/objc4-532/runtime/objc-runtime.mm) их реализация. –
@ H2CO3, файл с действительно интересным кодом - objc-references.mm: http://www.opensource.apple.com/source/objc4/objc4-532/runtime/objc-references.mm –