2016-05-29 10 views
0

NSTextStorageオブジェクトの場合、サードパーティのライブラリからmalloc'edストレージを取得するように設定したいと考えています。 (ストレージは、スワップ不可能でコピーできないという点で特別です。)これを行う可能性のある唯一の方法はallocWithZoneかもしれませんが、これはもはや使用されないように指定されています。 これを行う方法はありますか?あらかじめ割り当てられたmalloc'edストレージを使ってNSTextStorageを割り当てる方法

+0

私が知っているわけではありません。なぜこれが必要ですか? – jtbandes

+0

ストレージ内の情報は安全であり、スワップ不可能な領域内のメモリにはそのコピーが1つだけ存在します。 – alangh

答えて

2

NSTextStorageはサブクラスとして文書化されています。必要なプリミティブ(Subclassing Notesに記載されています)を実装する限り、任意の方法でバッキングストレージを実装することができます。

+0

良い点。もちろん、私は、AppKitがメモリに格納されたデータの別のコピーを作成しないという保証はないと思います(レンダリングの目的で、ある程度は確かにそうなります)。 – jtbandes

+0

これは可能です。バッキングストアがUTF-8のストレージブロックを指すことができると仮定すると、これはうまくいくはずです。ありがとう! – alangh

+0

@ jtbandesのところでは、 '[NSString bytesNoCopy:length:encoding:]'で文字列を作成すると、後でコピーされないという確かなチャンスがありますが、保証はありません。理由はあまりありません.AppKitは不要なコピーを避けるように試みます。しかし、同じ情報をエンコードするレンダリング中に、Core Textにグリフ生成がほぼ確実に発生します。ディスクへの書き込みを避けたいのであれば、ロックされたメモリも '/ var/vm/sleepimage'に書き込むハイバネーションを忘れないでください。 –

関連する問題