Sono un po 'confuso. Quando devo chiamare gratis e quando distruggi/dealloc? Sto lavorando ad uno snippet di codice breve per imparare l'audio di base. Ho pensato di chiamare lo UnsafeMutablePointer<Type>.alloc(size)
, quindi chiamare lo destroy
& dealloc
. Ma se uso malloc()
o calloc()
dovrei chiamare free()
.Come gestire correttamente UnsafeMutablePointer
In questo esempio da Learning Core Audio il seguente frammento di codice mi domando:
var asbds = UnsafeMutablePointer<AudioStreamBasicDescription>.alloc(Int(infoSize))
audioErr = AudioFileGetGlobalInfo(kAudioFileGlobalInfo_AvailableStreamDescriptionsForFormat,
UInt32(sizeof(fileTypeAndFormat.dynamicType)), &fileTypeAndFormat,
&infoSize, asbds)
Qui io uso alloc
. Per liberare memoria si chiama free
.
free(asbds)
Ma perché non
asbds.destroy(Int(infoSize))
asbds.dealloc(Int(infoSize))
che mi aspetterei seguendo la regola.
Apprezzerei qualsiasi aiuto, perché questo mi fa girare la testa. La documentazione dice che sono responsabile della distruzione e dealloc in modo che la parte sia chiara, ma in che modo?
Grazie mille. Questo ha aiutato molto. Mi piace molto l'approccio dell'array, che rende le cose molto più veloci. Ma per ottenere la parte 'libera()' chiarita per me. In questo momento non vi è alcuna differenza nel chiamare 'free'or' destroy'and 'dealloc'? Ho capito bene? Perché 'alloc' sta chiamando' malloc' dietro le quinte. – enovatia