Intereting Posts
आईओएस 6 MFMailComposeViewController: केवल आरजीबीए या व्हाइट कलर स्पेस का समर्थन करें, यह विधि हैक है आईओएस: फेसबुक और गूगल, गूगल प्लस दोनों में साइन इन का उपयोग करना फोटो एल्बम में AVFoundation का उपयोग किए गए फ़ोटो को कैसे सहेजना है? परिसेकिट – विश्व अक्षों पर आधारित घुमाए गए एक उप-उपनोड के रूपांतरण को परिवर्तित करें 64-बिट डिवाइस पर गतिशील पुस्तकालय दुर्घटना के साथ 32-बिट ऐप छवि को कैसे पास करें, uiimagepickercontroller से, दूसरे दृश्य के uiimageview में उद्देश्य-सी में चयनकर्ता को तर्क देते हुए मोबाइल क्रोम के पुल-डाउन टू रिफ्रेश को रोकने के लिए कैसे करें UIWebView webViewDidFinish लोड हो रहा है IOS कहा नहीं कोर डेटा में MOMD फ़ाइल का पथ कैसे प्राप्त करें क्या डिवाइस को विशिष्ट बनाना है। Plist फ़ाइल -आईओएस सुपर क्लास और उपवर्ग के साथ स्विफ्ट प्रोटोकॉल एक्सटेंशन विधि प्रेषण पता लगाएँ कि क्या निओट आईओएस ऐप को धक्का सूचना के माध्यम से खोला गया था संदर्भ इंटरफ़ेस का उपयोग करना, UIImageWriteToSavedPhotosAlbum में UnsafeRawPointer – स्विफ्ट 3 NSDatePicker से समय पर ऑडियो कैसे खेलें?

सरणीविशेषता का उपयोग करने का क्या फायदा है

सरणीविशेषता एक विधि NSArray.h में परिभाषित है और NSArray.m में कार्यान्वित है

जब मैं GNUStep प्रदान की गई कोड को देखता हूं, तो मैं उस सरणी को प्राप्त कर सकता हूंविड्थ क्षमता एक सामान्य विधि है जो initWithCapacity कॉल करती है:

 + (id) arrayWithCapacity: (NSUInteger)numItems { return AUTORELEASE([[self allocWithZone: NSDefaultMallocZone()] initWithCapacity: numItems]); } 

और initWithCapacity एक सरल तरीका है जो केवल स्वयं आरंभ करता है

 - (id) initWithCapacity: (NSUInteger)numItems { self = [self init]; return self; } 

क्रियान्वित वस्तुओं की संख्या के साथ स्मृति आवंटन के बारे में कुछ नहीं।
arrayWithCapacity विधि का उपयोग करने का क्या फायदा है? क्या यह बेहतर है [[NSArray alloc] init] ?

Solutions Collecting From Web of "सरणीविशेषता का उपयोग करने का क्या फायदा है"

उम्मीद है कि एक स्पष्ट आकार प्रदान करना स्मृति आवंटन को बेहतर बनाता है क्योंकि आइटम को जोड़ते समय सरणी के आकार को समायोजित करने की कोई आवश्यकता नहीं है। व्यवहार में, यह सिर्फ एक संकेत है और कुछ सबूत हैं कि इसका वास्तव में उपयोग नहीं किया गया है (फाउंडेशन संग्रह क्लासेस पर यह objc.io लेख देखें)।

विधियों वास्तव में NSMutableArray हिस्सा हैं, NSArray नहीं।

यह कार्यान्वयन आपको कितनी वस्तुओं को स्टोर करना पसंद करता है यह संकेत देता है कि इससे पहले ही मेमोरी की आवश्यकता के मुकाबले पर्याप्त मेमोरी अप-फ्रंट आवंटित किया जा सकता है, जो कि महंगा हो सकता है क्योंकि यह आवंटित हो सकता है, पुराने मेमोरी से कॉपी करने के लिए नया, पुरानी स्मृति को निरुपित करना और यदि आप बहुत सी चीजें जोड़ते हैं तो यह बढ़ती जा सकती है, इसलिए यह अधिक कुशल है अगर NSMutableArray एक बार में आवश्यक मात्रा की स्मृति आवंटित कर सकता है।

याद रखें कि यह सिर्फ एक संकेत है और एक कार्यान्वयन इसे अनदेखा कर सकता है। असल में, CFArray/CFMutableArray एक अस्थिर सरणी बनाने की क्षमता को नजरअंदाज नहीं करता है :

 static CFArrayRef __CFArrayInit(CFAllocatorRef allocator, UInt32 flags, CFIndex capacity, const CFArrayCallBacks *callBacks) { struct __CFArray *memory; UInt32 size; ... switch (__CFBitfieldGetValue(flags, 1, 0)) { case __kCFArrayImmutable: size += capacity * sizeof(struct __CFArrayBucket); break; case __kCFArrayDeque: case __kCFArrayStorage: break; } ... return (CFArrayRef)memory; } CFMutableArrayRef CFArrayCreateMutable(CFAllocatorRef allocator, CFIndex capacity, const CFArrayCallBacks *callBacks) { ... return (CFMutableArrayRef)__CFArrayInit(allocator, __kCFArrayDeque, capacity, callBacks); } 

@जस्रोमज द्वारा लिखित इस आलेख के अनुसार, NSMutableArray भी संकेत को अनदेखा कर रहा है।

यह NSMutableArray पर लागू होता है क्योंकि NSArray में विधि arrayWithCapacity नहीं है, यह भी initWithCapacity पर लागू होता है:

एक समय-समय पीओवी से arrayWithCapacity का उपयोग करने के लिए कोई फायदा नहीं है, तो एक नगण्य है। यह एक समयपूर्व अनुकूलन माना जा सकता है

इसका कोई नुकसान नहीं है या कुछ समय और / या कोड को ऐसे मान के साथ आने के लिए जो शायद ही कभी एक सार्थक समय लाभ प्रदान करता है और मानसिक भार को बढ़ाता है।

इसे एक संकेत भी माना जाता है और इसका प्रयोग नहीं किया जा सकता है या नहीं, यह एक कार्यान्वयन का विवरण है, एप्पल किसी भी टिन पर बदल सकता है।

नोट: मैंने क्षमता संकेत के साथ और सहेजे गए समय के साथ समय पर परीक्षण किए हैं, यदि कोई हो, तो बहुत कम प्रतिशत था।

NSArray बारे में अधिक जानकारी के लिए हास्यास्पद मछली भी देखें

@बीबीएम द्वारा टिप्पणी: "डॉक्स बस प्रारंभिक क्षमता को स्थापित नहीं करता है कि सरणी ने उस क्षमता को रखने के लिए स्मृति आवंटित की है। ऐरे का बैकिंग स्टोर लाइनरीली स्मृति के भाग को आवंटित नहीं करता है और विवरण सरणी के आकार के साथ बदलता है।"