2016-04-14 54 views
3

Bellek ayırma başarısız olabilir, ancak Swift bu durumları işlemez. github kod olmayan bir failable başlatıcı çağırırSwift: Neden init? (Uzunluk uzunluğu: Int) NSMutableData'nın başlatıcısı çözülemiyor?

public convenience init?(length: Int) { 
    let memory = malloc(length) 
    self.init(bytes: memory, length: length, copy: false) { buffer, amount in 
     free(buffer) 
    } 
} 

DÜZENLEME: kod yerli-Swift Vakfı çerçeve hızlı kullanıcılar listesinden Swift 3'te

+1

İlginç bir soru. Https://swift.org/community/#mailing-lists adresindeki posta listelerinden birinde daha iyi cevaplar alabilirsiniz. –

+0

Daha sonra ara yüzü değiştirmeden gelecekteki bir ihtimalin başarısız olması için ayrılmış gibi görünüyor. – Darko

cevap

1

gelmesini geçerli:

"Swift'in bellek ayırma hatasıyla ilgili ilkesi, sabit boyutlu nesne ayırmanın, ele alınamazsa bir çalışma zamanı hatası olarak kabul edilmesidir. OTOH, ayırmak için değişken ve isteğe bağlı olarak büyük miktarda alabilen API'ler, geçersiz olabilir. kategori." -Chris

+0

Yani bu başarısız olabilir ama asla başarısız olmaz mı? Tahsis ne olursa başarısız olursa? – fpg1503

+0

Mac'te başarısız oluyor. NSMutableData (uzunluk: 100000000000000000) nil – soyer

+0

döndürür Ben Chris'in noktası olsun ama benim şüphem: olabilir ** aslında ** başarısız? 'Malloc' diyelim ve bellek ''Artık' diyelim ki, bu verilere erişmeye çalışırken (yani, kötü erişim) büyük olasılıkla bir kaza olacak. – fpg1503