Jestem trochę zdezorientowany. Kiedy muszę dzwonić za darmo i kiedy niszczyć/dealloc? Pracuję nad krótkim rdzeniem nauki kodu źródłowego. Pomyślałem, że jeśli zadzwonię pod numer UnsafeMutablePointer<Type>.alloc(size)
, powinienem zadzwonić pod numer destroy
& dealloc
. Ale jeśli używam malloc()
lub calloc()
, powinienem zadzwonić pod numer free()
.Jak obsługiwać UnsafeMutablePointer poprawnie
W tym przykładzie od nauki Core Audio następujący fragment kodu sprawia, że zastanawiam się:
var asbds = UnsafeMutablePointer<AudioStreamBasicDescription>.alloc(Int(infoSize))
audioErr = AudioFileGetGlobalInfo(kAudioFileGlobalInfo_AvailableStreamDescriptionsForFormat,
UInt32(sizeof(fileTypeAndFormat.dynamicType)), &fileTypeAndFormat,
&infoSize, asbds)
Tutaj używam alloc
. Aby zwolnić pamięć, wywoływana jest nazwa free
.
free(asbds)
Ale dlaczego nie
asbds.destroy(Int(infoSize))
asbds.dealloc(Int(infoSize))
której bym się spodziewał po regule.
Byłbym wdzięczny za każdą pomoc, ponieważ to sprawia, że moja głowa się kręci. Dokumentacja mówi, że jestem odpowiedzialny za zniszczenie i dealloc, aby część była jasna, ale w jaki sposób?
Dziękuję bardzo. To bardzo pomogło. Bardzo podoba mi się podejście do tablicy, które sprawia, że rzeczy stają się bardziej szybkie. Ale żeby uzyskać część 'free()' wyczyszczoną dla mnie. W tej chwili nie ma żadnej różnicy w nazywaniu "free" lub "destroy" i "dealloc"? Czy rozumiem, że to prawda? Ponieważ 'alloc' nazywa' malloc' za zasłonami. – enovatia