2015-06-24 20 views
5

malloc() kullanarak belleği ayıran bir C işlevini çağırmak için Swift derleyicinin Bridging Header özelliğini kullanıyorum. Daha sonra bu belleğe bir işaretçi döndürür.Swift'de ücretsiz C-malloc() bellek mi?

Swift ise
char *the_function(const char *); 

, ben bu gibi kullanmak: fonksiyon prototip gibi bir şey

var ret = the_function(("something" as NSString).UTF8String) 

let val = String.fromCString(ret)! 

, C Swift ama normalde ilişkin Cahilliğimi bağışla eğer the_function() malloc'ing olan bellek ve Geri dönerken, başkasının bir noktada özgür olması gerekir().

Bu bir şekilde Swift tarafından ele alınmış mı yoksa bu örnekte bellek sızdırıyor muyum?

Şimdiden teşekkürler.

cevap

5

Swift malloc() ile ayrılan belleği yönetmek değil, sonunda belleği boşaltmak zorunda:

let ret = the_function("something") // returns pointer to malloc'ed memory 
let str = String.fromCString(ret)! // creates Swift String by *copying* the data 
free(ret) // releases the memory 

println(str) // `str` is still valid (managed by Swift) 

Not geçerken bir Swift String otomatik UTF-8 dizeye dönüştürülür olduğunu bir Cı işlevine String value to UnsafePointer<UInt8> function parameter behavior tarif edildiği gibi bir const char * parametre alarak.

let ret = the_function(("something" as NSString).UTF8String) 

let ret = the_function("something") 
+0

mantıklı basitleştirilmiş edilebilir yüzden budur, teşekkür ederim! – Christopher