2012-02-24 15 views
82

में 'कमजोर' और 'असाइन' के बीच का अंतर है क्या यह के बीच का अंतर:क्या प्रतिनिधि संपत्ति घोषणा

@property (nonatomic, weak) id <SubClassDelegate> delegate; 

और इस:

@property (nonatomic, assign) id <SubClassDelegate> delegate; 

मैं प्रतिनिधियों के लिए संपत्ति का उपयोग करना चाहते।

उत्तर

145

weak और assign के बीच फर्क सिर्फ इतना है कि पिंड एक weak संपत्ति अंक के लिए यदि पुनः आवंटित की जाती है, तो weak सूचक का मूल्य nil करने के लिए, का गठन किया जाएगा, ताकि आप कभी नहीं कचरा तक पहुँचने का जोखिम हो सकता है। यदि आप assign का उपयोग करते हैं, तो ऐसा नहीं होगा, इसलिए यदि ऑब्जेक्ट आपके नीचे से हटा दिया गया है और आप इसे एक्सेस करने का प्रयास करते हैं, तो आप कचरा एक्सेस करेंगे।

उद्देश्य-सी ऑब्जेक्ट्स के लिए, यदि आप ऐसे वातावरण में हैं जहां आप weak का उपयोग कर सकते हैं, तो आपको इसका उपयोग करना चाहिए।

+16

क्या आप जानते हैं कि कोको टच फ्रेमवर्क कक्षाओं में से कुछ अभी भी प्रतिनिधियों के लिए असाइन का उपयोग क्यों कर रहे हैं? उदाहरण के लिए, [UISearchDisplayController] के प्रतिनिधि (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UISearchDisplayController_Class/Reference/Reference.html#//apple_ref/occ/instp/UISearchDisplayController/delegate) अभी भी असाइन है। यह कभी अपडेट क्यों नहीं किया गया था? – Pwner

+0

@Pwner ऐसा लगता है कि इसे आईओएस 8.0 – Stavash

+0

में बहिष्कृत किया गया है यहां एक गैर-बहिष्कृत उदाहरण है: यहां तक ​​कि 'UITableView' के अपने प्रतिनिधि के लिए 'असाइन'' है:' @property (nonatomic, असाइन) आईडी प्रतिनिधि; ' –

संबंधित मुद्दे