2016-04-14 99 views
3

內存分配可能會失敗,但我認爲Swift不處理這種情況。 上github代碼調用非failable初始化Swift:爲什麼init?(長度length:Int)NSMutableData的初始化器failable?

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

編輯: 的代碼是從原生斯威夫特Foundation框架斯威夫特3.未來

+1

有趣的問題。您可以在https://swift.org/community/#mailing-lists上的郵件列表中找到更好的答案。 –

+0

看起來他們只是預留了未來可能性失敗而未事後更改接口。 – Darko

回答

1

從SWIFT用戶列表:

「Swift關於內存分配失敗的策略是,如果無法處理固定大小的對象分配,則認爲它是運行時失敗的.OTOH,可以接受變量和任意大量分配的API應該是可分解的。類別。」 -Chris

+0

所以它是failable,但它永遠不會失敗?如果分配失敗會發生什麼? – fpg1503

+0

它在Mac上失敗。 NSMutableData(長度:1000000000000000)返回零 – soyer

+0

我得到克里斯的點,但我的疑問是:它可以**實際**失敗?假設'malloc'失敗並且內存爲'.None',那麼當您嘗試訪問這些數據時(例如訪問不良),您可能會遇到崩潰。 – fpg1503