Swift'de makul C birlikte işlerliği elde etmenin en kolay yollarını arıyorum ve şu anki blok UnsafePointer<Int8>
(const char *
olan) bir [Int8]
dizisine dönüştürülüyor. Döngü kendisi arr.reserveCapacity(length)
kullanılarak hızlandırılabilirBir UnsafePointer uzunluğunu Swift Array türüne dönüştürme
func convert(length: Int, data: UnsafePointer<Int8>) {
let buffer = UnsafeBufferPointer(start: data, count: length);
var arr: [Int8] = [Int8]()
for (var i = 0; i < length; i++) {
arr.append(buffer[i])
}
}
:
Şu anda, eleman tarafından naif bir UnsafePointer
ve kaç bayt olacağı almak ve bir dizi dönüştürür olabilir algoritması öğesi Ancak, bu, döngü sorununu ortadan kaldırmaz.
Ben ancak String
farklı bir canavar [T]
tamamen olduğunu String
için UnsafePointer<Int8>
dönüştürmek için nasıl kapsayan this SO question farkındayım. UnsafePointer<T>
'dan uzunluk baytlarını [T]
'a kopyalamanın kullanışlı bir Swift yolu var mı? NSData
ya da benzerlerinden geçmeden saf Swift yöntemlerini tercih ederim. Yukarıdaki algoritma gerçekten bunu yapmanın tek yolu ise, buna bağlı kaldığım için mutluyum.
bu bellek sızıntısına neden olur mu? "UnsafeBufferPointer" ın belleğini boşaltacağına dair hiçbir belirti bulamıyorum. – Alexander
@AMomchilov: 'UnsafeBufferPointer 'sadece bir işaretçidir, belleği ayırmaz, bu nedenle ücretsiz bir şey yoktur. Array, daha sonra Swift tarafından yönetilir. –
Evet, ancak işaretçinin 'dönüşüme' geçmesi gerekiyor, doğru mu? Bu açık bir şekilde yapılmalıdır, IMO – Alexander