Wie wird UnsafeMutablePointer richtig behandelt?

Ich bin ein bisschen verwirrt. Wann muss ich kostenlos anrufen und wann zerstören / freigeben? Ich arbeite an einem kurzen Code-Snippet, um Core-Audio zu lernen. Ich dachte, wenn ich @ anruUnsafeMutablePointer<Type>.alloc(size) dann sollte ich @ anrufdestroy & dealloc. Aber wenn ich @ benutmalloc() odercalloc() Ich soll @ anruffree().

In diesem Beispiel aus Learning Core Audio wundert mich der folgende Codeausschnitt:

var asbds = UnsafeMutablePointer<AudioStreamBasicDescription>.alloc(Int(infoSize))
audioErr = AudioFileGetGlobalInfo(kAudioFileGlobalInfo_AvailableStreamDescriptionsForFormat,
                              UInt32(sizeof(fileTypeAndFormat.dynamicType)), &fileTypeAndFormat,
                              &infoSize, asbds)

Hier verwende ichalloc. So geben Sie Speicher freifreewird genannt

free(asbds)

Aber warum nich

asbds.destroy(Int(infoSize))
asbds.dealloc(Int(infoSize))

was ich erwarten würde nach der Regel.

Ich würde mich über jede Hilfe freuen, denn dadurch dreht sich mein Kopf. Die Dokumentation besagt, dass ich für das Zerstören und Freigeben verantwortlich bin, damit der Teil klar ist, aber auf welche Weise?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage