ऑब्जेक्टिव-सी में @property रिटेन, असाइन, कॉपी, नॉनटोमिक


214

जैसा कि कोई व्यक्ति जो उद्देश्य-सी के लिए नया है, क्या कोई मुझे रिटेन, असाइन, कॉपी और किसी अन्य व्यक्ति का अवलोकन दे सकता है, जो @property निर्देश का पालन करता है? वे क्या कर रहे हैं और मैं एक दूसरे पर क्यों इस्तेमाल करना चाहूंगा?


1
इनके लिए Apple का नाम "गुण" या "संपत्ति गुण" है
nevan king

जवाबों:


273

MrMage द्वारा लिंक किया गया लेख अब काम नहीं कर रहा है। इसलिए, मैंने अपने (बहुत) कम समय के उद्देश्य-सी में कोडिंग सीखी है:

गैर-परमाणु बनाम परमाणु - "परमाणु" डिफ़ॉल्ट है। हमेशा "गैर-परमाणु" का उपयोग करें। मुझे नहीं पता कि क्यों, लेकिन मैंने जो किताब पढ़ी है उसमें कहा गया है कि "परमाणु" का उपयोग करने के लिए "शायद ही कभी एक कारण" है। (बीटीडब्ल्यू: मैंने जो किताब पढ़ी है वह बीएनआर "आईओएस प्रोग्रामिंग" पुस्तक है।)

readwrite बनाम readonly - "readwrite" डिफ़ॉल्ट है। जब आप @synthesize करते हैं, तो आपके लिए एक गेटटर और सेटर दोनों बनाए जाएंगे। यदि आप "आसानी से" का उपयोग करते हैं, तो कोई सेटर नहीं बनाया जाएगा। उस मूल्य के लिए इसका उपयोग करें जिसे आप ऑब्जेक्ट की तात्कालिकता के बाद कभी बदलना नहीं चाहते हैं।

बनाए रखने बनाम प्रतिलिपि असाइन करें

  • "असाइन" डिफ़ॉल्ट है। @Synthesize द्वारा बनाए गए सेटर में, मान केवल विशेषता को सौंपा जाएगा। मेरी समझ यह है कि "असाइन" का उपयोग गैर-पॉइंटर विशेषताओं के लिए किया जाना चाहिए।
  • जब किसी ऑब्जेक्ट के लिए पॉइंटर पॉइंटर होता है तो "रिटेन" की जरूरत होती है। @Synthesize द्वारा उत्पन्न सेटर ऑब्जेक्ट को बनाए रखेगा (उर्फ एक रिटेन काउंट को जोड़ेगा)। जब आप इसे पूरा कर लेंगे तो आपको ऑब्जेक्ट को जारी करना होगा।
  • "प्रतिलिपि" की जरूरत तब होती है जब वस्तु परस्पर होती है। यदि आपको इस समय वस्तु के मूल्य की आवश्यकता है, तो इसका उपयोग करें, और आप यह नहीं चाहते कि वस्तु के अन्य मालिकों द्वारा किए गए परिवर्तनों को प्रतिबिंबित किया जाए। जब आप इसके साथ समाप्त हो जाते हैं, तो आपको उस ऑब्जेक्ट को जारी करना होगा, क्योंकि आप प्रतिलिपि बनाए रख रहे हैं।

@ बामरदोट - क्या मुझे इसे एआरसी के साथ
देजेल

10
@Odelya - नहीं। यदि आप ARC का उपयोग करते समय जारी करते हैं, तो मेरा मानना ​​है कि आपको संकलक त्रुटि मिलेगी।
ब्लामद्रोट

52
"हमेशा गैर-परमाणु का उपयोग करें" बुरी सलाह है। आपको पता होना चाहिए कि जब आप गैर-परमाणु का उपयोग करते हैं तो आप क्या दे रहे हैं।
जेसी रस्क

7
माना। विशेष रूप से, बहुत से लोगों को यह पता नहीं लगता है कि गैर-परमाणु मूल्यों को गेट्टर द्वारा बनाए नहीं रखा जाता है। गैर-परमाणु अक्सर उपयुक्त होता है, लेकिन कार्गो पंथ प्रोग्रामिंग शायद ही कभी होता है।
कैटफ़िश_मन

9
डिफ़ॉल्ट छोड़ने की सलाह देना atomicउतना ही बुरा है जितना कि सलाह देना nonatomic। न तो विकल्प "सही" है, इसलिए भाषा डिजाइनरों ने दो समाधानों के सुरक्षित होने का विकल्प चुना। वास्तव nonatomicमें आम तौर पर बेहतर विकल्प है क्योंकि यह बहुत महंगा धागा ताले को छोड़ देता है। उपयोग करने का एकमात्र कारण यह atomicहै कि यदि आपकी संपत्ति कई थ्रेड्स से सेट की जा सकती है (जिस स्थिति में इसे छोड़ने पर ओवर-रिलीज़ या रिसाव हो सकता है)।
एडम कपलान

295

इससे पहले कि आप @property की विशेषताओं के बारे में जानें, आपको पता होना चाहिए कि @property का उपयोग क्या है।

  • @property उन सूचनाओं को परिभाषित करने का एक तरीका प्रदान करता है जो एक वर्ग का उद्देश्य होता है। यदि आप @property का उपयोग करके किसी ऑब्जेक्ट / वेरिएबल की घोषणा करते हैं , तो वह ऑब्जेक्ट / वैरिएबल उसके क्लास को इम्पोर्ट करने वाले अन्य वर्गों के लिए सुलभ होगा।

  • यदि आप हेडर फ़ाइल में @property का उपयोग करके किसी ऑब्जेक्ट को घोषित करते हैं , तो आपको कार्यान्वयन फ़ाइल में @synthesize का उपयोग करके इसे संश्लेषित करना होगा । यह वस्तु को केवीसी के अनुरूप बनाता है । डिफ़ॉल्ट रूप से, कंपाइलर इस ऑब्जेक्ट के लिए एक्सेसर विधियों को संश्लेषित करेगा ।

  • एक्सेसर विधियाँ हैं: सेटर और गेट्टर।

उदाहरण:

@interface XYZClass : NSObject
@property (nonatomic, retain) NSString *name;
@end

।म

@implementation XYZClass
@synthesize name;
@end

अब कंपाइलर नाम के लिए एक्सेसर विधि को संश्लेषित करेगा ।

XYZClass *obj=[[XYZClass alloc]init];
NSString *name1=[obj name]; // get 'name'
[obj setName:@"liza"]; // first letter of 'name' becomes capital in setter method
  • @Property की विशेषताओं की सूची

    परमाणु, गैर-परमाणु, बरकरार, प्रतिलिपि, आसानी से, पढ़े-लिखे, असाइन, मजबूत, पाने वाला = विधि, सेटर = विधि, असुरक्षित_सुना

  • परमाणु डिफ़ॉल्ट व्यवहार है। यदि किसी वस्तु को परमाणु घोषित किया जाता है तो वह थ्रेड-सेफ़ हो जाती है। थ्रेड-सुरक्षित साधन, उस समय उस वर्ग के किसी विशेष उदाहरण के केवल एक थ्रेड पर उस ऑब्जेक्ट पर नियंत्रण हो सकता है।

यदि थ्रेड गेट्टर विधि कर रहा है, तो अन्य थ्रेड उस ऑब्जेक्ट पर सेटर विधि निष्पादित नहीं कर सकता है। यह धीमा है।

@property NSString *name; //by default atomic`
@property (atomic)NSString *name; // explicitly declared atomic`
  • गैर - परमाणु , धागा-सुरक्षित नहीं है। आप गैर-परमाणु संपत्ति विशेषता का उपयोग यह निर्दिष्ट करने के लिए कर सकते हैं कि संश्लेषित एक्सेसर्स सीधे मूल्य निर्धारित करते हैं या वापस लौटाते हैं, इस बात की कोई गारंटी नहीं है कि क्या होता है यदि उसी मूल्य को विभिन्न थ्रेड्स से एक साथ एक्सेस किया जाता है।

इस कारण से, परमाणु की तुलना में गैर-परमाणु संपत्ति तक पहुंचना तेज़ है।

@property (nonatomic)NSString *name;   
  • जब ऑब्जेक्ट किसी ऑब्जेक्ट का पॉइंटर होता है, तो रिटेन की आवश्यकता होती है।

सेटर विधि ऑब्जेक्ट की बनाए रखने की संख्या को बढ़ाएगी, जिससे यह ऑटोरेलिज पूल में मेमोरी पर कब्जा कर लेगा।

@property (retain)NSString *name;
  • कॉपी यदि आप कॉपी का उपयोग करते हैं, तो आप रिटेन का उपयोग नहीं कर सकते। कक्षा की प्रतिलिपि आवृत्ति का उपयोग करने पर इसकी अपनी प्रतिलिपि होगी।

भले ही एक उत्परिवर्ती स्ट्रिंग सेट हो और बाद में बदल जाए, उदाहरण उस समय जो भी मूल्य निर्धारित किया गया है, उसे कैप्चर करता है। कोई सेटर और गेट्टर विधियों को संश्लेषित नहीं किया जाएगा।

@property (copy) NSString *name;

अभी,

NSMutableString *nameString = [NSMutableString stringWithString:@"Liza"];    
xyzObj.name = nameString;    
[nameString appendString:@"Pizza"]; 

नाम अप्रभावित रहेगा।

  • आसानी से अगर आप संपत्ति को सेटर विधि के माध्यम से बदलने की अनुमति नहीं देना चाहते हैं, तो आप संपत्ति को आसानी से घोषित कर सकते हैं।

कंपाइलर एक गेटर उत्पन्न करेगा, लेकिन एक सेटर नहीं।

@property (readonly) NSString *name;
  • readwrite डिफ़ॉल्ट व्यवहार है। आपको रीडराईट विशेषता को स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता नहीं है।

यह पठनीयता के विपरीत है।

@property (readwrite) NSString *name;
  • असाइन एक सेटर उत्पन्न करेगा जो कॉपी करने या उसे बनाए रखने के बजाय सीधे इंस्टेंस वैरिएबल को मान प्रदान करता है। यह NSInteger और CGFloat जैसी आदिम प्रकारों के लिए सबसे अच्छा है, या ऐसी वस्तुएँ जिन्हें आप सीधे नहीं रखते हैं, जैसे प्रतिनिधि।

ध्यान रखें कि कचरा संग्रहण सक्षम होने पर मूल रूप से विनिमेय होने और असाइन होने योग्य है।

@property (assign) NSInteger year;
  • मजबूत बनाए रखने के लिए एक प्रतिस्थापन है।

यह एआरसी के साथ आता है।

@property (nonatomic, strong) AVPlayer *player; 
  • getter = विधि यदि आप एक getter विधि के लिए किसी भिन्न नाम का उपयोग करना चाहते हैं, तो गुण में गुण जोड़कर एक कस्टम नाम निर्दिष्ट करना संभव है।

बूलियन गुणों के मामले में (ऐसे गुण जिनके पास YES या NO मान है), यह गेटर विधि के लिए प्रथागत है "शब्द"

@property (getter=isFinished) BOOL finished;
  • सेटर = विधि यदि आप सेटर विधि के लिए एक अलग नाम का उपयोग करना चाहते हैं, तो संपत्ति में विशेषताओं को जोड़कर एक कस्टम नाम निर्दिष्ट करना संभव है।

विधि एक बृहदान्त्र के साथ समाप्त होनी चाहिए।

@property(setter = boolBool:) BOOL finished;
  • unsafe_unretain कोको और कोको टच में कुछ वर्ग हैं जो अभी तक कमजोर संदर्भों का समर्थन नहीं करते हैं, जिसका अर्थ है कि आप उन पर नज़र रखने के लिए एक कमजोर संपत्ति या कमजोर स्थानीय चर घोषित नहीं कर सकते हैं। इन वर्गों में NSTextView, NSFont और NSColorSpace, आदि शामिल हैं। यदि आपको इनमें से किसी एक वर्ग के कमजोर संदर्भ का उपयोग करने की आवश्यकता है, तो आपको असुरक्षित संदर्भ का उपयोग करना चाहिए।

एक असुरक्षित संदर्भ एक कमजोर संदर्भ के समान है, जिसमें वह अपनी संबंधित वस्तु को जीवित नहीं रखता है, लेकिन गंतव्य ऑब्जेक्ट के हटने पर इसे शून्य पर सेट नहीं किया जाएगा ।

@property (unsafe_unretained) NSObject *unsafeProperty;

यदि आपको कई विशेषताओं को निर्दिष्ट करने की आवश्यकता है, तो उन्हें इस तरह से अल्पविराम से अलग की गई सूची में शामिल करें:

@property (readonly, getter=isFinished) BOOL finished;

इसके अतिरिक्त, कमजोर का अर्थ है कि वस्तु के संदर्भ में कोई संदर्भ संख्या नहीं है, लेकिन यह बिल्कुल संदर्भित है, या बिल्कुल संदर्भित नहीं है। तरह तरह के "हां, कुछ मुझे संदर्भित" बनाम "मेरे लिए 9 संदर्भ मौजूद हैं" (जो मजबूत है वह पसंद है)।
एलेक्स ज़ावाटोन

6
कचरा संग्रहण के संबंध में उत्तर में लाइन को नजरअंदाज करें, क्योंकि कचरा संग्रह मैक ओएस एक्स में अपवर्तित है और आईओएस प्रति एप्पल प्रलेखन में गैर-मौजूद है ।
बेसिल बॉर्क

4
"ध्यान दें: संपत्ति की परमाणुता किसी वस्तु की धागा सुरक्षा का पर्याय नहीं है।" - developer.apple.com/library/mac/documentation/Cocoa/Conceptual/… से
jk7

1
"आप एक वस्तु का उपयोग कर की घोषणा तो @propertyहेडर फाइल में है, तो आप के लिए है इसे प्रयोग के संश्लेषण के @synthesizeकार्यान्वयन फ़ाइल में।" हर बार नहीं। उदाहरण के लिए, "डिफ़ॉल्ट रूप से, एक readwriteसंपत्ति एक उदाहरण चर द्वारा समर्थित होगी, जिसे फिर से संकलक द्वारा स्वचालित रूप से संश्लेषित किया जाएगा।" से दस्तावेज़
फ्रैंकलिन यू

4
@ लिज़ा यह एक उत्कृष्ट उत्तर है। यह स्वीकृत उत्तर क्यों नहीं है। यह वर्तमान में स्वीकृत उत्तर की तुलना में कहीं अधिक ज्ञानवर्धक व्याख्या करता है। मुझे कभी-कभी स्टैकऑवरफ्लो समझ में नहीं आता है?
चार्ल्स रॉबर्टसन

149

कई लेख पढ़ने के बाद मैंने सभी विशेषताओं की जानकारी एक साथ रखने का फैसला किया:

  1. परमाणु // डिफ़ॉल्ट
  2. nonatomic
  3. मजबूत = बनाए रखने / डिफ़ॉल्ट
  4. कमजोर = असुरक्षित_सुना
  5. बनाए रखने के
  6. // डिफ़ॉल्ट असाइन करें
  7. unsafe_unretained
  8. प्रतिलिपि
  9. सिफ़ पढ़िये
  10. readwrite // डिफ़ॉल्ट

नीचे विस्तृत लेख का लिंक दिया गया है जहाँ आप इन विशेषताओं को पा सकते हैं।

उन सभी लोगों को बहुत धन्यवाद, जो यहाँ सबसे अच्छा जवाब देते हैं !!

आईओएस में परिवर्तनीय संपत्ति विशेषताएँ या संशोधक

यहाँ अनुच्छेद से नमूना विवरण है

  1. परमाणु-परमाणु का अर्थ है कि केवल एक धागा चर (स्थिर प्रकार) तक पहुंचता है। -आटोमिक थ्रेड सेफ है। -लेकिन यह परफॉर्मेंस में धीमा है -ऑटोमैटिक डिफॉल्ट बिहेवियर है-नॉन गारबेज कलेक्टेड एनवायरनमेंट में एटोमिक ऐक्सेसर्स (यानी रिटेन / रिलीज / ऑटोरेलिज का इस्तेमाल करते समय) एक लॉक का इस्तेमाल यह सुनिश्चित करने के लिए करेगा कि दूसरा थ्रेड सही सेटिंग / मिलने में हस्तक्षेप न करे। मूल्य का। -यह वास्तव में एक कीवर्ड नहीं है।

उदाहरण :

@property (retain) NSString *name;

@synthesize name;
  1. गैर- परमाणु-आयनोमामिक का अर्थ है चर (डायनामिक प्रकार) के कई थ्रेड एक्सेस। -Nonatomic धागा असुरक्षित है। -लेकिन यह प्रदर्शन में तेज है -Nonatomic डिफ़ॉल्ट व्यवहार नहीं है, हमें संपत्ति विशेषता में गैर-परमाणु कीवर्ड जोड़ने की आवश्यकता है। -इसके परिणामस्वरूप अप्रत्याशित व्यवहार हो सकता है, जब दो अलग-अलग प्रक्रिया (थ्रेड) एक ही समय में एक ही चर का उपयोग करते हैं।

उदाहरण:

@property (nonatomic, retain) NSString *name;

@synthesize name;

के बारे में बताएं:

मान लीजिए कि "नाम" नामक एक परमाणु स्ट्रिंग संपत्ति है, और यदि आप थ्रेड ए से [सेल्फ सेटनाम: @ "ए"] को कॉल करते हैं, तो थ्रेड बी से [सेल्फ सेटनाम: @ "बी"] कॉल करें, और [सेल्फ नेम] को कॉल करें। थ्रेड सी, फिर विभिन्न थ्रेड पर सभी ऑपरेशन क्रमबद्ध रूप से किए जाएंगे जिसका अर्थ है कि यदि एक थ्रेड सेटर या गेट्टर को निष्पादित कर रहा है, तो अन्य थ्रेड्स इंतजार करेंगे। यह संपत्ति को "नाम" पढ़ने / लिखने के लिए सुरक्षित बनाता है लेकिन अगर एक और थ्रेड डी [नाम रिलीज] को एक साथ कॉल करता है तो यह ऑपरेशन एक दुर्घटना उत्पन्न कर सकता है क्योंकि यहां कोई सेटर / गेट्टर कॉल शामिल नहीं है। जिसका अर्थ है कि कोई वस्तु सुरक्षित / लिखित (ATOMIC) लिखी जाती है, लेकिन थ्रेड सुरक्षित नहीं है क्योंकि अन्य धागे एक साथ किसी भी प्रकार के संदेश को वस्तु में भेज सकते हैं। डेवलपर को ऐसी वस्तुओं के लिए थ्रेड सुरक्षा सुनिश्चित करनी चाहिए।

यदि संपत्ति "नाम" गैर-परमाणु थी, तो उपरोक्त सभी उदाहरण - ए, बी, सी और डी किसी भी अप्रत्याशित परिणाम का उत्पादन करने के साथ-साथ निष्पादित करेंगे। परमाणु के मामले में, ए, बी या सी में से कोई एक पहले निष्पादित करेगा लेकिन डी अभी भी समानांतर में निष्पादित कर सकता है।

  1. मजबूत (iOS4 = रिटेन) -यह कहता है कि "इसे ढेर में रखें जब तक मैं इसे इंगित नहीं करता" - दूसरे शब्दों में "मैं मालिक हूँ, आप इसे बनाए रखने से पहले इसे ठीक करने के उद्देश्य से नहीं निपटा सकते" - आप मजबूत का उपयोग केवल तभी करें जब आपको ऑब्जेक्ट को बनाए रखने की आवश्यकता हो। -सभी डिफ़ॉल्ट चर और स्थानीय चर मजबूत संकेत हैं। -हम आमतौर पर UIViewControllers के लिए मजबूत का उपयोग करते हैं (UI आइटम के माता-पिता) -स्ट्रोंग का उपयोग ARC के साथ किया जाता है और यह मूल रूप से आपकी मदद करता है, किसी ऑब्जेक्ट की रिटेन काउंट के बारे में चिंता न करने से। एआरसी स्वचालित रूप से आपके लिए इसे जारी कर देता है जब आप इसके साथ होते हैं। कीवर्ड को मजबूत करने का अर्थ है कि आपके पास ऑब्जेक्ट है।

उदाहरण:

@property (strong, nonatomic) ViewController *viewController;

@synthesize viewController;
  1. कमजोर (iOS4 = unsafe_unretain) -यह कहता है "इसे तब तक रखें जब तक कोई व्यक्ति इसे दृढ़ता से इंगित करता है" -जैसे ही कोई काम, कोई रिटेन या रिलीज नहीं होता है "कमजोर" संदर्भ एक संदर्भ है जिसे आप बनाए नहीं रखते हैं। -हम आम तौर पर IBOutlets (UIViewController's Childs) के लिए कमजोर का उपयोग करते हैं। यह काम करता है क्योंकि बच्चे की वस्तु को केवल तब तक मौजूद रहने की आवश्यकता होती है जब तक कि माता-पिता ऑब्जेक्ट करते हैं। -एक कमजोर संदर्भ एक संदर्भ है जो कचरा कलेक्टर द्वारा संग्रह से संदर्भित ऑब्जेक्ट की रक्षा नहीं करता है। -जब अनिवार्य रूप से असाइन किया जाता है, तो एक अप्राप्य संपत्ति। सिवाय जब ऑब्जेक्ट को हटा दिया जाए तो कमजोर सूचक स्वचालित रूप से शून्य पर सेट हो जाता है

उदाहरण :

@property (weak, nonatomic) IBOutlet UIButton *myButton;

@synthesize myButton;

मजबूत और कमजोर व्याख्या, बीजे होमर को धन्यवाद :

कल्पना कीजिए कि हमारी वस्तु एक कुत्ता है, और यह कि कुत्ता भागना चाहता है (निस्संकोच)। मजबूत संकेत कुत्ते पर पट्टा की तरह हैं। जब तक आपके पास कुत्ते से जुड़ा पट्टा है, तब तक कुत्ता भाग नहीं जाएगा। यदि पाँच लोग अपने पट्टे को एक कुत्ते को देते हैं, (पाँच मजबूत संकेत एक वस्तु को), तो कुत्ता तब तक नहीं भागेगा जब तक कि सभी पाँच पट्टे अलग न हो जाएँ। दूसरी ओर कमजोर बिंदु, छोटे बच्चों की तरह हैं जो कुत्ते की ओर इशारा करते हैं और कहते हैं कि "देखो! कुत्ता!" जब तक कुत्ता अभी भी पट्टा पर है, छोटे बच्चे अभी भी कुत्ते को देख सकते हैं, और वे अभी भी इसे इंगित करेंगे। जैसे ही सभी पट्टा अलग हो जाते हैं, हालांकि, कुत्ते को कोई फर्क नहीं पड़ता कि कितने छोटे बच्चे इसे इंगित कर रहे हैं। जैसे ही अंतिम मजबूत सूचक (पट्टा) किसी वस्तु की ओर इशारा नहीं करता है, वस्तु को हटा दिया जाएगा, और सभी कमजोर बिंदुओं को शून्य कर दिया जाएगा। जब हम कमजोर का उपयोग करते हैं? केवल उसी समय जब आप कमजोर का उपयोग करना चाहते हैं, यदि आप चक्र को बनाए रखने से बचना चाहते हैं (जैसे माता-पिता बच्चे को बनाए रखते हैं और बच्चा माता-पिता को बनाए रखता है तो न तो कभी जारी किया जाता है)।

  1. बनाए रखने = मजबूत -यह बनाए रखा है, पुराने मूल्य जारी किया गया है और यह निर्दिष्ट करता है नया मान असाइनमेंट और पुराने मूल्य पर -retain भेजा जाना चाहिए -retain असाइन किया गया है भेजा -release -retain मजबूत के समान है। -पल कहता है कि अगर आप रिटेन लिखते हैं तो यह ऑटो कन्वर्टेड / मजबूत की तरह काम करेगा। -मिथोड जैसे "आवंटित" में एक निहित "रिटेन" शामिल है

उदाहरण:

@property (nonatomic, retain) NSString *name;

@synthesize name;
  1. असाइनमेंट- असाइन करना डिफॉल्ट है और बस एक वेरिएबल असाइनमेंट -असाइन करता है, एक प्रॉपर्टी एसेट है, जो कंपाइलर को बताता है कि प्रॉपर्टी के सेटर इंप्लीमेंटेशन को कैसे संश्लेषित किया जाए-मैं सी प्राइमरी प्रॉपर्टीज के लिए असाइनमेंट का इस्तेमाल करेगा और ऑब्जेक्टिव-सी ऑब्जेक्ट्स के कमजोर रेफरेंस के लिए कमजोर होगा।

उदाहरण:

@property (nonatomic, assign) NSString *address;

@synthesize address;
  1. unsafe_unretained

    -unsafe_unretain ARC बताता है कि ARC बताता है कि कैसे अनुरक्षण / रिलीज़ कॉल सम्मिलित करें / -sun_tainre ARC असाइनमेंट का संस्करण है।

उदाहरण:

@property (nonatomic, unsafe_unretained) NSString *nickName;

@synthesize nickName;
  1. कॉपी- कोपी की आवश्यकता तब होती है जब ऑब्जेक्ट म्यूट होता है। -कॉपी निर्दिष्ट करता है कि नया मान भेजा जाना चाहिए-असाइनमेंट पर कार्य और पुराने मूल्य भेजा -release। -कॉपी बनाए रखने की तरह है एक वस्तु जिसे आपको गैर-कचरा एकत्र किए गए वातावरण में स्पष्ट रूप से जारी करना होगा (जैसे, डीलॉक में)। -यदि आप कॉपी का उपयोग करते हैं तो आपको अभी भी डीललोक में जारी करने की आवश्यकता है। -इसका उपयोग करें यदि आपको इस समय वस्तु के मूल्य की आवश्यकता है, और आप उस मूल्य को वस्तु के अन्य मालिकों द्वारा किए गए परिवर्तनों को प्रतिबिंबित नहीं करना चाहते हैं। जब आप इसके साथ समाप्त हो जाते हैं तो आपको उस वस्तु को जारी करना होगा, क्योंकि आप प्रतिलिपि बनाए रख रहे हैं।

उदाहरण:

@property (nonatomic, copy) NSArray *myArray;

@synthesize myArray;

2
मुझे लगता है कि आर्क के बाद, रिटेन का उपयोग नहीं किया जाता है।
mert

1
पूरी सूची में 2 विकल्प आइटम छूट जाते हैं: सेटर और गेट्टर, जो एकमात्र विकल्प भी तर्क की आवश्यकता है।
स्कॉट चू

मजबूत या बनाए रखना केवल ऑब्जेक्ट प्रकार के लिए डिफ़ॉल्ट है। इसका उपयोग आदिम प्रकारों के लिए नहीं किया जा सकता है।
सालेह एनम शोहग

9

परमाणु संपत्ति को एक समय में केवल एक धागे से एक्सेस किया जा सकता है। यह धागा सुरक्षित है । डिफ़ॉल्ट परमाणु है। कृपया ध्यान दें कि कोई कीवर्ड परमाणु नहीं है

गैर-परमाणु का अर्थ है कि कई थ्रेड आइटम तक पहुँच सकते हैं। यह थ्रेड असुरक्षित है

इसलिए परमाणु का उपयोग करते समय किसी को बहुत सावधान रहना चाहिए। क्या यह आपके कोड के प्रदर्शन को प्रभावित करता है


3
"ध्यान दें: संपत्ति की परमाणुता किसी वस्तु की धागा सुरक्षा का पर्याय नहीं है।" डेवलपर
।apple.com

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.