Swift:为什么init?(长度:Int)NSMutableData';s初始值设定项失败?

Swift:为什么init?(长度:Int)NSMutableData';s初始值设定项失败?,swift,swift2,nsdata,initializer,failable,Swift,Swift2,Nsdata,Initializer,Failable,内存分配可能会失败,但我认为Swift不会处理这种情况。 上的代码调用不可失败的初始值设定项 public convenience init?(length: Int) { let memory = malloc(length) self.init(bytes: memory, length: length, copy: false) { buffer, amount in free(buffer) } } 编辑: 代码源于Swift 3中的Swift基

内存分配可能会失败,但我认为Swift不会处理这种情况。 上的代码调用不可失败的初始值设定项

public convenience init?(length: Int) {
    let memory = malloc(length)
    self.init(bytes: memory, length: length, copy: false) { buffer, amount in
        free(buffer)
    }
}
编辑:
代码源于Swift 3中的Swift基础框架,从SWIFT用户列表中<


“Swift关于内存分配失败的政策是,如果无法处理固定大小的对象分配,则视为运行时失败。OTOH,可以分配变量和任意大数量的API应该是失败的。NSData属于后一类。”-Chris

有趣的问题。您可能会在中的一个邮件列表中得到更好的答案。看起来他们只是保留了它,以备将来在不更改接口的情况下失败。所以它是可以失败的,但从来不会失败?如果分配失败会发生什么?它在mac上失败。NSMutableData(长度:10000000000000)返回nilI get Chris'点,但我的疑问是:它真的会失败吗?假设
malloc
失败,内存
。无
,您在尝试访问该数据时可能会崩溃(即访问错误)。使用新的Swift Foundation?这对我来说有点有趣,因为这个电话是委托给一个不会失败的初始化者的。不,不是Swift基金会。使用当前的Xcode和swift 2.2,它返回nil,并向标准输出写入一些错误消息$R0:NSMutableData?=无