2011-05-23 8 views
27

एनएसजेडोन क्या है? InitWithZone का उपयोग करने के क्या फायदे हैं :?

 
1. NSDefaultMallocZone() 
2. NSCreateZone(); 
3. NSRecycleZone(); 
4. NSSetZoneName(); 
5. NSZoneMalloc(); 
and many more related to NSZone 

क्या NSZone का मतलब होता है, जहां इन कार्यों का उपयोग करने के लिए और जब की तरह इतने सारे कार्यों रहे हैं?
initWithZone के फायदे क्या हैं: और मेरे आईफोन ऐप में कैसे उपयोग करें?

उत्तर

38

एनएसज़ोन ऑब्जेक्ट आवंटन और मुक्त करने का ऐप्पल का तरीका है। NSZone कोई ऑब्जेक्ट नहीं है; यह एक अपारदर्शी सी-स्ट्रक्चर है जो मेमोरी ऑब्जेक्ट्स के सेट के लिए संभाला जाना चाहिए, इस बारे में जानकारी संग्रहीत करना।

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

आप सस्ते वस्तुओं की बड़े पैमाने पर आवंटन सैकड़ों हैं, तो आप वास्तव में उनके लिए जगह का आवंटन महत्वपूर्ण हो जाता है की लागत मिल सकता है। चूंकि मानक क्षेत्र का उपयोग हर समय किया जाता है, यह बहुत पैची हो सकता है; हटाए गए ऑब्जेक्ट्स पूरे स्मृति में अजीब अंतराल छोड़ सकते हैं। के लिए आवंटक मानक NSZone यह जानता है, और को सिस्टम से अधिक मेमोरी को पकड़ने के लिए इन अंतर को भरने का प्रयास करता है, लेकिन यह क्षेत्र में महंगा हो सकता है यदि ज़ोन काफी बड़ा हो गया है।

आप करना चाहते हैं तो बड़े पैमाने पर आवंटित वस्तुओं, , आप अपने खुद के क्षेत्र बना सकते हैं और यह बताना अंतराल खोजने में नई वस्तुओं डाल करने के लिए के साथ परेशान करने के लिए नहीं। संभाजक अब के अंत के लिए कूद कर सकते हैं हर बार इसकी आवंटित स्मृति और जल्दी से आपके नए ऑब्जेक्ट्स को मेमोरी असाइन करते हैं, जिससे बहुत से प्रयास बचाते हैं।

Allocators आप कहीं और समय भी बचा सकता है अधिक स्मृति है, जो एक क्षेत्र जब भी यह भरता करने की जरूरत के लिए ओएस पूछ के रूप में, एक और महंगा संचालन करता है, तो यह एक बहुत कुछ किया गया है। एक समय में स्मृति के विशाल भाग के लिए पूछना बहुत तेज़ है, और आप अपने NSZone को यहां क्या करना है बता सकते हैं।

अफवाह NSZone आप भी गुड ओल्ड दिनों में आवंटन रद्द करने के लिए समय की बचत हो सकती है कि एक विधि के साथ यह है कि बस chucks दूर सब आवंटित स्मृति deallocators कॉल करने के लिए परेशान कर के बिना। यदि ऑब्जेक्ट्स का एक सेट स्वयं निहित है, तो यह बहुत समय समय बचा सकता है, क्योंकि आप उन्हें बिना किसी परेशानी से बिना किसी को हटा सकते हैं। हां, वर्तमान दस्तावेज में इस देवता का कोई संकेत नहीं है; एकल एनएसज़ोन विधि (एनएसआरईसायकलज़ोन?) ध्यान से सभी ऑब्जेक्ट्स को ज़ोन में डिफ़ॉल्ट रूप से डिफ़ॉल्ट NSZone पर रखता है। बिल्कुल एक बड़ा समय बचाने वाला नहीं है।

तो संक्षेप में, जोन आपको द्रव्यमान आवंटन में समय बचाते हैं। लेकिन केवल प्रोग्रामर जानते हैं कि उनका उपयोग कैसे करें!

CocoaDev

+8

यह भी ध्यान रखें करने के लिए महत्वपूर्ण है कि आप से अगर आप एआरसी का उपयोग कर रहे NSZone किसी भी अधिक का उपयोग नहीं कर सकते हैं। आपको कौन सा होना चाहिए – Adam

+0

@Adam, अगर आप भी उद्धरण जोड़ सकते हैं, तो मुझे लगता है कि उत्तर में जवाब जोड़ने के लायक है। –

+1

https://developer.apple.com/library/mac/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011226-CH1-SW11: "आप मेमोरी जोन का उपयोग नहीं कर सकते एनएसजेडोन का उपयोग करने की कोई ज़रूरत नहीं है- उन्हें आधुनिक उद्देश्य-सी रनटाइम द्वारा वैसे भी अनदेखा किया जाता है। " फाउंडेशन फ़ंक्शन प्रलेखन इंगित करता है कि जोन्स वास्तव में आईओएस और 64 बिट ओएसएक्स रनटाइम पर अनदेखा कर रहे हैं। – Norswap

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