2016-04-14 8 views
3

メモリの割り当ては失敗する可能性がありますが、Swiftはそのようなケースを処理しないと思います。 コードSWIFTユーザーのリストからスウィフト3.Swift:なぜinitですか?(長さの長さ:Int)NSMutableDataのイニシャライザは有効ですか?

+1

興味深い質問。 https://swift.org/community/#mailing-listsのメーリングリストでより良い回答を得ることができます。 –

+0

後でインターフェイスを変更せずに失敗する可能性があるため、予約したようです。 – Darko

答えて

1

に来てネイティブ・スウィフトFoundationフレームワークからです:

github上 コードは、EDITは

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

非failable初期化子を呼び出します「メモリ割り当ての失敗に対するSwiftの方針は、固定サイズのオブジェクト割り当てが処理できないと実行時の失敗とみなされるということです.OTOHでは、変数を任意に割り当てることができるAPIを割り当てることができます。カテゴリー。" -Chris

+0

だから、それは実現可能ですが、決して失敗しませんか?割り当てが失敗した場合はどうなりますか? – fpg1503

+0

これはMacで失敗します。 NSMutableData(長さ:1000000000000000)はnilを返します – soyer

+0

私はChrisのポイントを取得しますが、疑いがあります。 'malloc'が失敗し、メモリが' .None'であるとすると、そのデータにアクセスしようとするとクラッシュする可能性があります(不正なアクセス)。 – fpg1503

関連する問題