Biraz kafam karıştı. Ne zaman ücretsiz ve ne zaman yok/dealloc çağırmalıyım? Ben çekirdek ses öğrenme kısa kod snippet üzerinde çalışıyorum. UnsafeMutablePointer<Type>.alloc(size)
'u aradığımda, destroy
& dealloc
'u aramam gerektiğini düşündüm. Ama malloc()
veya calloc()
kullanıyorsam, free()
'u aramam gerekiyor. Aşağıdaki kod parçası yapar Öğrenme Core Audio Bu örnekte UnsafeMutablePointer düzgün bir şekilde nasıl kullanılır
var asbds = UnsafeMutablePointer<AudioStreamBasicDescription>.alloc(Int(infoSize))
audioErr = AudioFileGetGlobalInfo(kAudioFileGlobalInfo_AvailableStreamDescriptionsForFormat,
UInt32(sizeof(fileTypeAndFormat.dynamicType)), &fileTypeAndFormat,
&infoSize, asbds)
Burada
alloc
kullanın. Belleği boşaltmak için
free
çağrılır.
free(asbds)
Ama neden
asbds.destroy(Int(infoSize))
asbds.dealloc(Int(infoSize))
Ben kural aşağıdaki beklenebilir ki.
Herhangi bir yardım için minnettarım, çünkü bu benim baş döndürür. Dokümantasyon, parçaların net, ancak bu şekilde nasıl tahrip edilmesinden ve dürüstlükten sorumlu olduğumu söylüyor.
Çok teşekkür ederim. Bu çok yardımcı oldu. Dizi yaklaşımını çok seviyorum, bu da işleri çok daha hızlı bir hale getiriyor. Ama 'free() 'bölümünü benim için temizledim. Şu anda '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' Bunu doğru mu anladım? Çünkü 'Tahsis' perdelerin ardında 'malloc' diyor. – enovatia