@property की विशेषताओं के बारे में चर्चा करने से पहले, आपको पता होना चाहिए @property का प्रयोग होता है क्या। @property जानकारी है कि एक वर्ग संपुटित करने का इरादा है परिभाषित करने के लिए एक तरह से प्रदान करता है। आप @property का उपयोग कर एक वस्तु / चर घोषित है, तो उस वस्तु / चर अपने वर्ग का आयात अन्य वर्गों के लिए सुलभ हो जाएगा। आप हेडर फाइल में @property का उपयोग कर एक वस्तु की घोषणा है, तो आप कार्यान्वयन फ़ाइल में @synthesize का उपयोग कर इसे संश्लेषण करने की है।
उदाहरण:
ज वर्ग
@interface ExampleClass : NSObject
@property (nonatomic, retain) NSString *name;
@end
मीटर वर्ग
@implementation ExampleClass
@synthesize name;
@end
अब संकलक नाम के लिए तरीके एक्सेसर संश्लेषण जाएगा।
ExampleClass *newObject=[[ExampleClass alloc]init];
NSString *name1=[newObject name]; // get 'name'
[obj setName:@“Tiger”];
@property की विशेषताओं की सूची: परमाणु। nonatomic। बरकरार रहती है। प्रति। सिफ़ पढ़िये। पढ़ना लिखना। आवंटित। बलवान।
परमाणु: यह डिफ़ॉल्ट व्यवहार है। एक वस्तु परमाणु रूप में घोषित किया जाता है तो यह धागा सुरक्षित हो जाता है। थ्रेड-सुरक्षित साधन, एक समय में उस वर्ग के एक विशेष उदाहरण का केवल एक धागा है कि वस्तु पर नियंत्रण हो सकता है।
उदाहरण :
@property NSString *name; //by default atomic
@property (atomic)NSString *name; // explicitly declared atomic
nonatomic: यह धागा सुरक्षित नहीं है। आप तो क्या होता है कि एक ही मूल्य अलग धागे से एक साथ पहुँचा जा सकता है के बारे में कोई गारंटी के साथ कि संश्लेषित accessors बस सेट तैयार करें या एक मूल्य के सीधे वापस जाने के लिए, nonatomic संपत्ति विशेषता का उपयोग कर सकते हैं। इस कारण से, यह एक परमाणु की तुलना में एक nonatomic संपत्ति का उपयोग करने के लिए तेजी से है।
@property (nonatomic)NSString *name;
बनाए रखें: जब विशेषता एक object.The सेटर विधि के लिए एक सूचक, वस्तु की गिनती को बनाए रखने में वृद्धि होगी, ताकि यह autorelease पूल में स्मृति को घेरता है है की आवश्यकता है।
@property (retain)NSString *name;
प्रतिलिपि: यदि आप प्रतिलिपि का उपयोग करते हैं, तो आप को बनाए रखने का उपयोग नहीं कर सकते हैं। वर्ग के प्रति उदाहरण का उपयोग करते हुए अपनी ही प्रतिलिपि होगी। यहां तक कि अगर एक परिवर्तनशील स्ट्रिंग सेट और बाद में बदल दिया गया है, उदाहरण के कब्जा जो भी मान यह समय के सेट होने पर पर है। कोई सेटर और गेटर तरीकों संश्लेषित कर दिया जाएगा।
@property (copy) NSString *name;
NSMutableString *nameString = [NSMutableString stringWithString:@"Liza"];
xyzObj.name = nameString;
[nameString appendString:@"Pizza"];
केवल पढ़ने के लिए: यदि आप संपत्ति सेटर विधि के माध्यम से परिवर्तित करने की अनुमति देने के लिए नहीं करना चाहते हैं, तो आप संपत्ति केवल पढ़ने के लिए घोषणा कर सकते हैं।
@property (readonly) NSString *name;
ReadWrite: डिफ़ॉल्ट व्यवहार है। आप स्पष्ट रूप से ReadWrite विशेषता निर्दिष्ट करने की आवश्यकता नहीं है।
@property (readwrite) NSString *name;
आवंटित: एक सेटर जो सीधे उदाहरण चर के लिए मूल्य प्रदान करती है, बल्कि कॉपी करने या इसे बनाए रखने की तुलना में उत्पन्न होगा। इस तरह के प्रतिनिधियों के रूप में आप सीधे के स्वामी नहीं हैं NSInteger और CGFloat, या वस्तुओं की तरह आदिम प्रकार, के लिए सबसे अच्छा है।
@property (assign) NSInteger year;
मजबूत: बनाए रखने के लिए एक स्थानापन्न है।
@property (nonatomic, strong) AVPlayer *player;
unsafe_unretained: वहाँ कोको और कोको टच में कुछ वर्गों है कि अभी तक कमजोर संदर्भ का समर्थन नहीं करते, जिसका अर्थ है आप एक कमजोर संपत्ति या कमजोर स्थानीय चर की घोषणा नहीं कर सकते हैं उन पर नज़र रखने के लिए कर रहे हैं। इन कक्षाओं NSTextView, NSFont और NSColorSpace, आदि शामिल हैं। आप इन वर्गों में से एक के लिए एक कमजोर संदर्भ का उपयोग करने की जरूरत है, तो आप एक असुरक्षित संदर्भ का उपयोग करना चाहिए। एक असुरक्षित संदर्भ में है कि वह अपने संबंधित वस्तु जिंदा नहीं रख करता है एक कमजोर संदर्भ के समान है, लेकिन यह करता है, तो गंतव्य वस्तु पुनः आवंटित की जाती है शून्य करने के लिए सेट नहीं किया जाएगा।
@property (unsafe_unretained) NSObject *unsafeProperty;