मैं वास्तव में देखना चाहता हूं कि यह एक सरणी कैसे बनाता है। मैं .m फ़ाइलों को कैसे देख सकता हूं जो दिखाता है कि यह कैसे किया जाता है?क्या करता है -एरेविथअरे वास्तव में क्या करता है?
उत्तर
जैसा कि @ केन ने उल्लेख किया है, आप स्रोत नहीं देख सकते (हालांकि आप gdb के माध्यम से विधि को अलग कर सकते हैं)।
विधि अपने आप में एक अपरिवर्तनीय (बदला नहीं जा सकता), autoreleased दिया सरणी की प्रतिलिपि बनाता है। निम्नलिखित व्यवहार में समान हैं:
// Both resulting arrays are immutable and won't be retained
NSArray* immutableArray = [[[NSArray alloc] initWithArray:mutableArray] autorelease];
NSArray* immutableArray = [NSArray arrayWithArray:mutableArray];
NSArray* immutableArray = [[mutableArray copy] autorelease];
ब्रेवटी के आधार पर जो भी आपको पसंद है उसे चुनें, मुझे लगता है :-)।
नहीं, कोको खुला स्रोत नहीं है।
यदि आपके कोई प्रश्न है, तो आपको बस यह पूछना चाहिए।
+ (id)arrayWithArray:(NSArray *)array {
return [[[self alloc] initWithArray:array] autorelease];
}
आप NSArray के लिए GNUStep स्रोत पढ़ सकते हैं, लेकिन ध्यान रखें कि यह कोको एपीआई का एक वैकल्पिक कार्यान्वयन है हो:
यह इसे लागू करने के एक वैध तरीका होगा।
यदि आप पूछ रहे हैं कि +arrayWithArray
का उद्देश्य क्या है (-initWithArray
के आस-पास एक ऑटोरेलीज रैपर होने के अलावा), तो मैं कहूंगा कि यह यह है: जब आप किसी सरणी की एक ऑटोरेलेज्ड प्रतिलिपि बनाना चाहते हैं तो इसका उपयोग करें। दूसरे शब्दों में, आप इसे इस तरह देख सकते हैं:
NSArray * original = /* ... */;
NSArray * newArray = [NSArray arrayWithArray:original];
के बराबर है:
NSArray * original = /* ... */;
NSArray * newArray = [[original copy] autorelease];
मैं कहना चाहता हूँ यह जब यह आपकी शैली के अनुकूल उपयोग करने के लिए सुविधा के लिए नहीं है।
यह पूरी तरह सच नहीं है। आपकी धारणा यह है कि 'मूल' एक एनएसएआरएआरई है। लेकिन यह एनएसएआरएआरई से ली गई कुछ भी हो सकती है। और ऑब्जेक्ट की कक्षा अपनी 'प्रतिलिपि' लागू कर सकती है। इसलिए '[[मूल प्रतिलिपि] autorelease];' एनएसएआरएआरई वापस करने की गारंटी नहीं है। – Coyote
GNUstep, OpenStep कल्पना जहाँ से कोको और कोको टच उतरना की जीएनयू कार्यान्वयन, +arrayWithArray:
लागू करता है इस प्रकार है:
/**
* Returns a new autoreleased NSArray instance containing all the objects from
* array, in the same order as the original.
*/
+ (id) arrayWithArray: (NSArray*)array
{
id o;
o = [self allocWithZone: NSDefaultMallocZone()];
o = [o initWithArray: array];
return AUTORELEASE(o);
}
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Source/NSArray.m?view=markup
- 1. इमेजस्विचर वास्तव में क्या करता है?
- 2. क्या org.apache.commons.lang.builder.CompareToBuilder वास्तव में करता है?
- 3. रैक हैंडलर वास्तव में क्या करता है?
- 4. numpy.apply_along_axis वास्तव में क्या करता है?
- 5. इवेंट कीवर्ड वास्तव में क्या करता है?
- 6. एक्सकोड 'क्लीन' वास्तव में क्या करता है?
- 7. jquery $ वास्तव में क्या करता है?
- 8. डेटाबेस सामान्यीकरण वास्तव में क्या करता है?
- 9. fillMode वास्तव में क्या करता है?
- 10. URLConnection.setDoOutput() को वास्तव में क्या करता है?
- 11. बीईक्यू निर्देश वास्तव में क्या करता है?
- 12. आयात "आयात *" वास्तव में क्या करता है?
- 13. regsvr32 filename.ax वास्तव में क्या करता है?
- 14. वास्तव में CascadeType.REFRESH क्या करता है?
- 15. _locking() वास्तव में क्या करता है?
- 16. वास्तव में दोपैसफ़िल्टर GPUImage क्या करता है?
- 17. 'म्यूटेक्स लॉक' वास्तव में क्या करता है?
- 18. क्या pg_escape_string वास्तव में करता है?
- 19. jquery वास्तव में क्या ऑब्जेक्ट करता है?
- 20. ifstream :: rdbuf() वास्तव में क्या करता है?
- 21. सीडीएटीए वास्तव में क्या है और यह क्या करता है?
- 22. रनटाइम वास्तव में क्या करता है। क्या किया जाता है?
- 23. वास्तव में * क्या * एक्सकोड में "मुख्य इंटरफेस" क्या करता है?
- 24. अवरोधक चयन क्या करता है। वास्तव में क्या करें?
- 25. एंड्रॉइड वास्तव में क्या करता है: layout_column क्या करते हैं?
- 26. कीवर्ड सेट वास्तव में वीबीए में क्या करता है?
- 27. jquery में कीवर्ड प्रोटोटाइप वास्तव में क्या करता है?
- 28. AFNetworking में रजिस्टर एचटीटीपीऑपरेशन क्लास वास्तव में क्या करता है?
- 29. ज़ेन फ्रेमवर्क में यह $-- escape() वास्तव में क्या करता है?
- 30. ट्रैविस-सीआई वास्तव में PHP विकास में क्या करता है?
हमम ... यह अपरिवर्तनीय है? खैर मुझे प्रत्येक ऑब्जेक्ट को नई सरणी में एक अतिरिक्त रिलीज संदेश (आवंटित आवंटित) में भेजने की आवश्यकता है ताकि कोई रिसाव न हो। मैं सभी वस्तुओं को एक अपरिवर्तनीय सरणी में कैसे छोड़ूं? – RexOnRoids
वस्तुओं को सरणी द्वारा बनाए रखा जाता है जब वे जोड़े जाते हैं, इसलिए जब सरणी जारी की जाती है, तो अंदर की वस्तुओं को भी – slf
जारी किया जाना चाहिए ताकि ऑब्जेक्ट्स को रिलीज़ संदेश भेजने के लिए आपको एक नई सरणी क्यों चाहिए? अपरिवर्तनीय अर्थ है कि ARRAY को बदला नहीं जा सकता है, आप सरणी के अंदर ऑब्जेक्ट्स को हमेशा बदल सकते हैं (या संदेश भेज सकते हैं) ... या बेहतर अभी तक, ऑटोरेलीज ऑब्जेक्ट्स उन्हें सरणी में जोड़ने से पहले और फिर आपको किसी चीज़ के बारे में चिंता करने की ज़रूरत नहीं है । –