Objective-C コードに C コードが埋め込まれたプロジェクトに取り組んでいます。C コードは、Objective-C メソッド間で渡したい void * ポインターをいくつか生成します。そのため、それらを Objective-C オブジェクトでラップして、NSSet
またはそのような効果を持たせたいと考えています。
任意のデータを受け入れるようですが、私NSData
が持っていないメモリチャンクの長さを知りたいです。
どんな助けでも大歓迎です。
Objective-C コードに C コードが埋め込まれたプロジェクトに取り組んでいます。C コードは、Objective-C メソッド間で渡したい void * ポインターをいくつか生成します。そのため、それらを Objective-C オブジェクトでラップして、NSSet
またはそのような効果を持たせたいと考えています。
任意のデータを受け入れるようですが、私NSData
が持っていないメモリチャンクの長さを知りたいです。
どんな助けでも大歓迎です。
NSValue
クラスは通常、このタスクに使用されます。
NSValue* value = [NSValue valueWithPointer: myPointer];
と
void* myPointer = [value pointerValue];
ただし、指定されたポインタは、メモリ管理に関して特別な扱いを受けないことに注意してください。あなた (およびあなただけ) は、そのメモリ領域へのポインタが存在し、プログラムの一部で到達可能である限り、それが指すメモリが有効なままであることを確認する責任があります。
ただし、そのような値をNSSet
a のキーとして、またはキーとして使用NSDictionary
すると、意図した効果が得られる場合と得られない場合があることに注意してください。
NSData
基本的にバイトバッファです。実際には、問題のメモリの内容を表しています。等しいかどうかのインスタンスの比較NSData
は、バイト レベルで比較します。NSData
これは、問題のメモリ領域の長さを知る必要がある理由の 1 つです。
NSValue
ポインター値を使用することは、まったく別の獣です。ここで、その実際の (数値) ポインター値が重要です。NSValue
(2 つのインスタンスを比較する場合) アドレスの実際の内容は考慮されません。