2011-04-04 4 views
5

नामकरण के रूप में सेएप्पल यदि आप इसे एक विधि जिसका नाम "alloc" या "नया" या शामिल साथ शुरू होता है का उपयोग कर बनाने के कन्वेंशन

से पहले

आप एक वस्तु का स्वामित्व लेने Cocoa Memory Management Rules में कहा गया है के लिए अपनी मेमोरी मैनेजमेंट नियम बदल "प्रतिलिपि" (उदाहरण के लिए, आवंटन, newObject, या mutableCopy), या यदि आप इसे एक सतत संदेश भेजते हैं।

दिसंबर 2010 के बाद यह नहीं पढ़ा है, लेकिन जब से

आप "बनाने" के लिए तब से बदल गया है एक वस्तु एक विधि जिसका नाम "alloc" के साथ शुरू होता उपयोग करते हुए, "नया", " कॉपी करें ", या" mutableCopy "(उदाहरण के लिए, alloc, newObject, या mutableCopy)।

ध्यान दें कि अब, इसे "प्रतिलिपि" उपसर्ग के रूप में होना आवश्यक है। इसके परिणामस्वरूप क्लैंग स्टेटिक विश्लेषक से कुछ स्मृति संबंधी चेतावनियां हुईं :(। इंटरवेब्स खोजने के बाद, मुझे यह निष्कर्ष निकाला नहीं गया कि यह क्यों बदला गया क्योंकि यह आईओएस के लिए मेमोरी मैनेजमेंट की मूल नींव में से एक है।

किसी को भी पता है क्यों? धन्यवाद!

उत्तर

6

वहाँ कुछ तरीके कि उनके पाठ में "कॉपी" निहित थे, लेकिन स्पष्ट रूप से कॉपी करने के तरीकों नहीं थे। उदाहरण के लिए, +[NSData dataWithBytesNoCopy:length:]। इसके लिए व्याख्या का उपयोग करना निश्चित रूप से किया गया था, संभव गैर-मानक व्यवहार के बारे में सूचित करने के लिए स्थिर विश्लेषक, लेकिन आम तौर पर मुझे संदेह है कि लगभग कोई भी नहीं (स्वयं को छोड़कर) ने कभी भी एक प्रतिलिपि विधि लिखी है जो copy या mutableCopy से शुरू नहीं हुई, इसलिए उन्होंने चीजों को सरल बनाने का निर्णय लिया।

मुझे खुशी है कि उन्होंने किया, स्पष्ट रूप से, जैसा कि मैंने विपरीत समस्या में भाग लिया है, जहां एक विधि में "प्रतिलिपि" शब्द शामिल था लेकिन इसका स्वामित्व संदर्भ वापस करने का इरादा नहीं था।

+0

+1 निश्चित रूप से यह। यह नियमों में बदलाव नहीं था, बस उनके दस्तावेज में एक स्पष्टीकरण। –

+0

मुझे लगता है कि वे इसे '+ [NSData डेटाविथबाइट्सप्लेस: लंबाई:]' नहीं कह सकते हैं? –

+0

मेरे लिए पर्याप्त मेला :) – LaN

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

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