कोई विस्तार से मेरे लिए व्याख्या कर सकते हैं जब मैं प्रत्येक विशेषता का उपयोग करना होगा: nonatomic
, copy
, strong
, weak
, और इतने पर, एक घोषित संपत्ति के लिए, और समझाओ कि प्रत्येक क्या करता है? कुछ प्रकार का उदाहरण भी महान होगा। मैं एआरसी का उपयोग कर रहा हूँ।ऑब्जेक्टिव-सी घोषित @property विशेषताएं (nonatomic, कॉपी, मजबूत, कमजोर)
उत्तर
इस उत्तर में कई त्रुटियां हैं और पुरानी भी है। कृपया अन्य प्रश्न/उत्तर और टिप्पणियां देखें।
nonatomic
nonatomic
बहु सूत्रण प्रयोजनों के लिए प्रयोग किया जाता है। अगर हमने घोषणा के समय nonatomic विशेषता सेट की है, तो उस ऑब्जेक्ट तक पहुंचने के लिए कोई अन्य थ्रेड इसे एक्सेस कर सकता है और बहु-थ्रेडिंग के संबंध में परिणाम दे सकता है।
कॉपी
copy
आवश्यक जब वस्तु परिवर्तनशील है। यदि आप इस पल में ऑब्जेक्ट के मान की आवश्यकता है तो इसका उपयोग करें, और आप नहीं चाहते कि वह ऑब्जेक्ट के अन्य मालिकों द्वारा किए गए किसी भी बदलाव को प्रतिबिंबित करे। जब आप इसके साथ समाप्त हो जाते हैं तो आपको ऑब्जेक्ट को रिलीज़ करने की आवश्यकता होगी क्योंकि आप प्रतिलिपि बना रहे हैं।
असाइन
Assign
कुछ हद तक copy
के विपरीत है। assign
संपत्ति के गेटर को कॉल करते समय, यह वास्तविक डेटा का संदर्भ देता है। आमतौर पर आप इस विशेषता का उपयोग जब आप आदिम प्रकार की एक संपत्ति है (नाव, पूर्णांक, BOOL ...)
को बनाये रखें जब विशेषता एक वस्तु के लिए सूचक है
retain
की आवश्यकता है। @synthesize
द्वारा उत्पन्न सेटटर ऑब्जेक्ट को बनाए रखेगा (उर्फ एक बरकरार गिनती जोड़ें)। जब आप इसके साथ समाप्त कर लेंगे तो आपको ऑब्जेक्ट को रिलीज़ करने की आवश्यकता होगी। बनाए रखने का उपयोग करके यह गिनती गिनती को बढ़ाएगा और ऑटोरेलीज पूल में मेमोरी पर कब्जा करेगा।
मजबूत
strong
बनाए रखने विशेषता के लिए एक स्थानापन्न, ऑब्जेक्टिव-सी स्वचालित संदर्भ गिनती (एआरसी) के हिस्से के रूप है। गैर-एआरसी कोड में यह बरकरार रखने के लिए सिर्फ एक पर्याय है।
यह एक अच्छा वेबसाइट आईओएस 5 के लिए http://www.raywenderlich.com/5677/beginning-arc-in-ios-5-part-1
कमजोर
weak
सिवाय इसके कि यह 1 से संदर्भ गिनती में वृद्धि नहीं होगी strong
के समान है के बारे में strong
और weak
सीखना है। यह उस वस्तु का मालिक नहीं बनता है बल्कि इसका संदर्भ रखता है। यदि ऑब्जेक्ट की संदर्भ संख्या 0 तक गिर जाती है, भले ही आप इसे यहां इंगित कर रहे हों, फिर भी इसे स्मृति से हटा दिया जाएगा।
उपरोक्त लिंक में वीक और स्ट्रॉन्ग के बारे में अच्छी जानकारी दोनों शामिल हैं।
स्पष्टीकरण के लिए धन्यवाद, मेरे पास कुछ प्रश्न हैं, हालांकि 1. मेरे पास मेरी मुख्य डेटा क्लास है, इस कक्षा में मेरे पास मजबूत सभी सेट हैं। फिर जब मैं एक और कक्षा बना रहा हूं, तो मेरे पास टेक्स्टबॉक्स से एनएसएसटींग प्राप्त करने का वैरिएबल वैल्यू है, क्या यह एनएसएसटींग वैल्यू कमजोर प्रकार का होना चाहिए? नोब प्रश्नों के लिए खेद है अभी भी सीख रहा है ... –
यदि आप इस कक्षा में आंतरिक रूप से आंतरिक रूप से इस एनएसएसटींग का उपयोग कर रहे हैं, तो आपको केवल एक संपत्ति की आवश्यकता नहीं है, तो आप इसे केवल एक आईवर बना सकते हैं और यदि आप इसे किसी अन्य वर्ग में उपयोग कर रहे हैं सलाह (मजबूत, प्रतिलिपि)। –
आप असाइन संपत्ति खो रहे हैं। – mskw
यह लिंक नीचे
http://clang.llvm.org/docs/AutomaticReferenceCounting.html#ownership.spelling.property
असाइन __unsafe_unretained स्वामित्व का तात्पर्य ब्रेक है।
प्रतिलिपि __strong स्वामित्व का तात्पर्य है, साथ ही साथ सेटर पर अर्थशास्त्र के सामान्य व्यवहार का तात्पर्य है।
__strong स्वामित्व का तात्पर्य है।
मजबूत __strong स्वामित्व का तात्पर्य है।
unsafe_unretained का अर्थ है __unsafe_unretained स्वामित्व।
कमजोर __weak स्वामित्व का तात्पर्य है।
असाइन संपत्ति नहीं है जो केवल iVar के लिए उपयोग की जाती है और मूल्य? तो यह असुरक्षित क्यों है और यह ध्यान देने की आवश्यकता क्यों है कि यह अप्रत्याशित है? – mskw
nonatomic
संपत्ति है कि वस्तु सुरक्षित थ्रेड नहीं है जिसका मतलब है कि एक अलग धागा इस वस्तु से बुरी चीजें भी हो सकता है का उपयोग करने की कोशिश करता है लेकिन यह परमाणु संपत्ति की तुलना में बहुत तेजी से होता है, तो कहा गया है।
strong
एआरसी के साथ प्रयोग किया जाता है और यह मूल रूप से किसी ऑब्जेक्ट की बनाए रखने की गिनती के बारे में चिंता न करने से आपकी सहायता करता है। जब आप इसके साथ काम करते हैं तो एआरसी स्वचालित रूप से आपके लिए इसे रिलीज़ करता है। कीवर्ड strong
का अर्थ यह है कि आप ऑब्जेक्ट का स्वामी हैं।
weak
स्वामित्व का अर्थ है कि आपके पास इसका स्वामित्व नहीं है और यह ऑब्जेक्ट का ट्रैक तब तक ट्रैक रखता है जब तक कि यह ऑब्जेक्ट को जारी नहीं किया जाता है, जैसे ही दूसरी ऑब्जेक्ट जारी होती है, यह मूल्य खो जाती है। उदाहरण के लिए। obj.a=objectB;
का उपयोग किया जाता है और इसकी कमजोर संपत्ति होती है, इसकी कीमत केवल तभी मान्य होगी जब तक ऑब्जेक्ट बी स्मृति में न रहे।
copy
संपत्ति बहुत अच्छी तरह से है explained here
strong,weak,retain,copy,assign
ताकि आप उन्हें एक ही लक्ष्य पर उपयोग नहीं कर सकते ... "Declared Properties " अनुभाग
पढ़ उम्मीद कर इस तुम बाहर में मदद करता है एक सा परस्पर अनन्य हैं ...
क्यों मजबूत, कमजोर, बनाए रखने, प्रतिलिपि, पारस्परिक रूप से अनन्य –
'nonatomic' असाइन करने का मतलब है कि कोई बहिष्करण लागू नहीं किया गया है। इसका मतलब यह नहीं है कि एक्सेस थ्रेड सुरक्षित नहीं है। यह एक कार्यान्वयन विस्तार है कि 'परमाणु' बनाम 'nonatomic' कब्जा नहीं करता है। – bbum
@bbum क्या आप कोई बहिष्करण और थ्रेड सुरक्षित नहीं के बीच अंतर समझा सकते हैं ..? –
शानदार उत्तर! एक चीज जिसे मैं गहराई से स्पष्ट करना चाहता हूं nonatomic
/atomic
है। उपयोगकर्ता को यह समझना चाहिए कि यह संपत्ति - "परमाणु" केवल विशेषता के संदर्भ पर फैली हुई है, न कि इसकी सामग्री पर। आईई। atomic
पॉइंटर को पढ़ने/सेट करने और विशेषता के लिए केवल सूचक के लिए उपयोगकर्ता परमाणु की गारंटी देगा। उदाहरण के लिए:
@interface MyClass: NSObject
@property (atomic, strong) NSDictionary *dict;
...
इस मामले में यह गारंटी है कि dict
सूचक/पढ़ा जाएगा अलग धागे से परमाणु ढंग से निर्धारित किया है। लेकिन dict
स्वयं (शब्दकोश dict
इंगित करता है) अभी भी थ्रेड असुर है, यानी शब्दकोश में सभी पढ़/जोड़ ऑपरेशन अभी भी असुरक्षित हैं।
यदि आपको थ्रेड सुरक्षित संग्रह की आवश्यकता है तो आपके पास खराब आर्किटेक्चर (अधिकतर) या वास्तविक आवश्यकता (अधिक दुर्लभ) है। यदि यह "असली आवश्यकता" है - तो आपको या तो & परीक्षण थ्रेड सुरक्षित संग्रह घटक ढूंढना चाहिए या परीक्षणों और कष्टों के लिए तैयार रहना चाहिए जो स्वयं को लिख रहे हैं। बाद वाला मामला "लॉक-फ्री", "प्रतीक्षा-मुक्त" प्रतिमानों को देखें। पहली नज़र में रॉकेट-साइंस की तरह दिखता है, लेकिन "सामान्य लॉकिंग" की तुलना में शानदार प्रदर्शन प्राप्त करने में आपकी सहायता कर सकता है।
यहां उत्तर दिया गया है http://stackoverflow.com/a/32942413/1961064 –
http://rypress.com/tutorials/objective-c/properties यह बताता है कि यह सभी –