मैं थोड़ा उलझन में हूं। मुझे कब कॉल करना होगा और कब नष्ट/डेलोक करना होगा? मैं एक लघु कोड स्निपेट सीखने कोर ऑडियो पर काम कर रहा हूँ। मैंने सोचा कि अगर मैं UnsafeMutablePointer<Type>.alloc(size)
पर कॉल करता हूं तो मुझे destroy
& dealloc
पर कॉल करना चाहिए। लेकिन अगर मैं malloc()
या calloc()
का उपयोग करता हूं तो मुझे free()
पर कॉल करना होगा।UnsafeMutablePointer को सही तरीके से कैसे संभालें
लर्निंग कोर ऑडियो से इस उदाहरण निम्नलिखित कोड का टुकड़ा बनाता में मुझे आश्चर्य है:
var asbds = UnsafeMutablePointer<AudioStreamBasicDescription>.alloc(Int(infoSize))
audioErr = AudioFileGetGlobalInfo(kAudioFileGlobalInfo_AvailableStreamDescriptionsForFormat,
UInt32(sizeof(fileTypeAndFormat.dynamicType)), &fileTypeAndFormat,
&infoSize, asbds)
यहाँ मैं alloc
का उपयोग करें। स्मृति को मुक्त करने के लिए free
कहा जाता है।
free(asbds)
लेकिन क्यों
asbds.destroy(Int(infoSize))
asbds.dealloc(Int(infoSize))
नहीं जो मैं नियम का पालन उम्मीद करेंगे।
मैं किसी भी मदद की सराहना करता हूं, क्योंकि इससे मेरा सिर स्पिन बन जाता है। प्रलेखन का कहना है कि मैं नष्ट करने और नष्ट करने के लिए ज़िम्मेदार हूं ताकि हिस्सा स्पष्ट हो, लेकिन किस तरह से?
आपको बहुत बहुत धन्यवाद। इससे बहुत मदद मिली। मुझे वास्तव में सरणी दृष्टिकोण पसंद है, जो चीजों को और अधिक तेज़ बनाता है। लेकिन मेरे लिए 'मुक्त()' भाग साफ़ करने के लिए। अभी 'मुक्त' नष्ट 'और 'dealloc' को कॉल करने में कोई अंतर नहीं है? क्या मैं सही समझ गया? क्योंकि 'alloc' पर्दे के पीछे 'malloc' को बुला रहा है। – enovatia