0

NSOperation インスタンス内のデータ全体を malloc しました。私はポインタを持っています:

data = malloc(humungous_amounts_of_god_knows_what);
uint8_t* data;

これを NSData インスタンスとしてパッケージ化し、メイン スレッドに返すにはどうすればよいですか? NSData インスタンスに変換した後、次のように簡単に呼び出すことができると想定しています。

free(data);

はい?

また、メインスレッドに戻って、どうすればポインタを取得できますか?

ありがとう、
ダグ

4

2 に答える 2

1

-dataWithBytes:length:またはそのバリアントのいずれかが必要です。

NSData *d = [NSData dataWithBytes:data length:lengthOfDataInBytes];

バイトをコピーすると、次のことができますfree(data)datause を使用して割り当てられていると仮定して、コピーを保存するにはmalloc:

NSData *d = [NSData dataWithBytesNoCopy:data length:lengthOfDataInBytes];

この場合、インスタンスがバッファを解放するため、バッファを呼び出さないでください。freeNSData

これらのメソッドはすべてautoreleasedインスタンスを返すため、スレッド間で維持したい (そして GC を使用していない) 場合は、おそらくインスタンスを保持する必要があることに注意してください。代わりに同等のalloc/initWithBytes:...初期化子を使用できます。

NSData のコンテンツへのポインターを取得するには、 を使用しますbytes

(ドキュメンテーションの数分でNSData十分に役立つと思います)

于 2010-06-11T20:54:35.153 に答える
0

バリー、ありがとう

私は実際にはもっとシンプルなものを使いました。

ポインターの周りに NSValue ラッパーを配置します。

NSValue *value = [NSValue valueWithPointer:imageData];

メインスレッドに返されるように辞書に入れます。

[result setObject:value forKey:cubicFaceName];

メインスレッドに戻り、データの処理が終わったら破棄します。

uint8_t *bits = [value pointerValue];
free(bits);

乾杯、
ダグ

于 2010-06-12T15:13:01.023 に答える