2011-12-08 20 views
6

आईओएस 5 में, "बनाए रखें" और "रिलीज" अब समर्थित नहीं हैं। इसके बजाय "मजबूत" और "कमजोर" नया तरीका है।आईओएस 5 @property

आईओएस 4 कोड:

@property(nonatomic, retain) 
@property(nonatomic, assign) 

iOS 5 कोड:

??? 
??? 

उत्तर

12

"। IOS 5 में, रिहाई को बनाए रखने के किसी भी अधिक समर्थित नहीं हैं" वे हैं, एआरसी का उपयोग करते समय नहीं।

एआरसी का उपयोग करते समय, -[<NSObject> retain] एक नो-ऑप है।

गुणों के लिए, यदि आप एआरसी का उपयोग करते हैं तो strong का उपयोग कर सकते हैं, लेकिन इसकी आवश्यकता नहीं है (यदि आप चाहें तो retain भी उपयोग कर सकते हैं)। strong और retain समान हैं:

@property(nonatomic, strong) 
@property(nonatomic, assign) 

बस सुनिश्चित करें कि आप लगातार (एक ही परियोजना में strong और retain दोनों का उपयोग नहीं करते) कर रहे हैं।

+0

बीटीडब्ल्यू उद्देश्य-सी टीम ने पुराने कोड के साथ पिछड़ा संगत किया। –

+0

दोनों मजबूत/एक साथ बनाए रखने का उपयोग करने के लिए कोई गंभीर कारण नहीं है? क्या यह सिर्फ एक पठनीयता चिंता है? मूल रूप से –

+0

@ क्रैग। मुझे लगता है कि यह एआरसी के लिए नए लोगों को भ्रमित कर सकता है। –

5

वे बिल्कुल वैसा ही है, लेकिन नहीं कर रहे हैं मूल रूप से retain := strong और assign := weak मैं ARC Release notes

+3

दरअसल, 'असाइन' 'कमजोर 'की तुलना में' unsafe_unretained' के करीब है। कमजोर संपत्ति असाइनमेंट एक नई अवधारणा है। –

+2

यह भी ध्यान रखें कि कमजोर प्राचीन प्रकार के लिए काम नहीं करेगा जैसे int। आपको असाइनमेंट का उपयोग करना होगा। –

4

nonatomic संपत्ति राज्यों पर एक नज़र लेने के सुझाव है कि वस्तु सुरक्षित थ्रेड नहीं है जिसका मतलब है कि एक अलग धागा इस वस्तु का उपयोग करने की कोशिश करता है तो बुरी चीजों की तुलना में हो सकता है लेकिन यह परमाणु संपत्ति से बहुत तेज है।

strong एआरसी के साथ प्रयोग किया जाता है और यह मूल रूप से किसी ऑब्जेक्ट की बनाए रखने की गिनती के बारे में चिंता न करने से आपकी सहायता करता है। जब आप इसके साथ काम करते हैं तो एआरसी स्वचालित रूप से आपके लिए इसे रिलीज़ करता है। कीवर्ड strong का अर्थ यह है कि आप ऑब्जेक्ट का स्वामी हैं।

weak स्वामित्व का अर्थ है कि आपके पास इसका स्वामित्व नहीं है और यह ऑब्जेक्ट का ट्रैक तब तक ट्रैक रखता है जब तक कि यह ऑब्जेक्ट को जारी नहीं किया जाता है, जैसे ही दूसरी ऑब्जेक्ट जारी होती है, यह मूल्य खो जाती है। उदाहरण के लिए। obj.a=objectB; का उपयोग किया जाता है और इसकी कमजोर संपत्ति होती है, इसकी कीमत केवल तब तक मान्य होगी जब तक ऑब्जेक्ट बी स्मृति में न रहे।

copy संपत्ति बहुत अच्छी तरह से समझाया गया है यहाँ https://stackoverflow.com/a/5002646/919545

strong,weak,retain,copy,assign ताकि आप उन्हें एक ही लक्ष्य पर उपयोग नहीं कर सकते ... उम्मीद कर इस मदद करता है http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1

की "घोषित गुण" अनुभाग पढ़ें परस्पर अनन्य हैं आप थोड़ा सा ...