खोज…


परिचय

सबसे पहले iOS 3.1 को ऑब्जेक्टिव-सी रनटाइम के हिस्से के रूप में पेश किया गया था, इससे जुड़ी वस्तुएं मौजूदा वर्ग ऑब्जेक्ट (w \ o उपक्लाशिंग) में उदाहरण चर जोड़ने का एक तरीका प्रदान करती हैं।

इसका मतलब है कि आप किसी भी अन्य वस्तु को बिना सबक्लास किए किसी भी वस्तु को संलग्न कर पाएंगे।

वाक्य - विन्यास

  • शून्य objc_setAssociatedObject (आईडी ऑब्जेक्ट, शून्य * कुंजी, आईडी मान, objc_AssociationPolicy नीति)

  • आईडी objc_getAssociatedObject (आईडी ऑब्जेक्ट, शून्य * कुंजी)

  • शून्य objc_removeAssociatedObjects (आईडी ऑब्जेक्ट)

पैरामीटर

परम विवरण
वस्तु मौजूदा वस्तु जिसे आप संशोधित करना चाहते हैं
चाभी यह मूल रूप से कोई भी पॉइंटर हो सकता है, जिसमें एक निरंतर मेमोरी एड्रेस होता है, लेकिन एक अच्छी प्रैक्टिस यहां एक गणना की गई संपत्ति (गेट्टर) का उपयोग करना है
मूल्य वह वस्तु जिसे आप जोड़ना चाहते हैं
नीति इस नए value लिए मेमोरी पॉलिसी यानी इसे किसी भी अन्य संपत्ति की तरह ही रखा / सौंपा, कॉपी किया जाना चाहिए, कॉपी किया जाना चाहिए

टिप्पणियों

अधिक जानकारी यहाँ:

NSHipster

@kostiakoval

kingscocoa

मूल संबद्ध वस्तु उदाहरण

मान लें कि हमें SomeClass ( SomeClass can subclass) में NSString ऑब्जेक्ट जोड़ना होगा।

इस उदाहरण में हम न केवल एक संबद्ध वस्तु बनाते हैं, बल्कि इसे अतिरिक्त साफ-सुथरी के लिए एक श्रेणी में एक गणना की गई संपत्ति में भी लपेटते हैं

#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));
}

अब संपत्ति का उपयोग करना जितना आसान होगा

SomeClass *instance = [SomeClass alloc] init];
instance.associated = @"this property is an associated object under the hood";



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow