जैसा कि हम जानते हैं, हम एक श्रेणी और रनटाइम विधियों जैसे 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) उनके कार्यान्वयन। –
@ एच 2CO3, वास्तव में दिलचस्प कोड वाली फ़ाइल objc-references.mm है: http://www.opensource.apple.com/source/objc4/objc4-532/runtime/objc-references.mm –