Bildiğimiz gibi, bir kategori ve objc_setAssociatedObject
ve objc_getAssociatedObject
gibi çalışma zamanı yöntemlerini kullanarak Objective-C'de bir değişken ekleyebiliriz. Örneğin:objc_setAssociatedObject nasıl çalışır?
#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
Ama kimse objc_getAssociatedObject
veya objc_setAssociatedObject
ne yapar biliyor? Yani, nesneye eklediğimiz değişken (burada self
) nerede saklanıyor? Ve değişken ile self
arasındaki ilişki?
Sadece mülk kullanmamak için herhangi bir sebep var mı? Nasıl çalıştığını anlamadan çalışma zamanı ile uğraşmaya çalışmam. –
[İşte] (http://www.opensource.apple.com/source/objc4/objc4-532/runtime/objc-runtime.mm) bunların uygulanması. –
@ H2CO3, aslında ilginç bir kod içeren dosya objc-references.mm: http://www.opensource.apple.com/source/objc4/objc4-532/runtime/objc-references.mm –