1

Objective-C コードに C コードが埋め込まれたプロジェクトに取り組んでいます。C コードは、Objective-C メソッド間で渡したい void * ポインターをいくつか生成します。そのため、それらを Objective-C オブジェクトでラップして、NSSetまたはそのような効果を持たせたいと考えています。

任意のデータを受け入れるようですが、私NSDataが持っていないメモリチャンクの長さを知りたいです。

どんな助けでも大歓迎です。

4

1 に答える 1

5

NSValueクラスは通常、このタスクに使用されます。

NSValue* value = [NSValue valueWithPointer: myPointer];

void* myPointer = [value pointerValue];

ただし、指定されたポインタは、メモリ管理に関して特別な扱いを受けないことに注意してください。あなた (およびあなただけ) は、そのメモリ領域へのポインタが存在し、プログラムの一部で到達可能である限り、それが指すメモリが有効なままであることを確認する責任があります。

ただし、そのような値をNSSeta のキーとして、またはキーとして使用NSDictionaryすると、意図した効果が得られる場合と得られない場合があることに注意してください。

NSData基本的にバイトバッファです。実際には、問題のメモリの内容を表しています。等しいかどうかのインスタンスの比較NSDataは、バイト レベルで比較します。NSDataこれは、問題のメモリ領域の長さを知る必要がある理由の 1 つです。

NSValueポインター値を使用することは、まったく別の獣です。ここで、その実際の (数値) ポインター値が重要です。NSValue(2 つのインスタンスを比較する場合) アドレスの実際の内容は考慮されません。

于 2012-05-17T10:51:28.880 に答える