3

私が必要としているのはかなり簡単です:

のメモリアドレスの16進NSLog("%@",someObject);NSString* Hex = [NSString stringWithFormat:@"%p",someObject];を出力できるのと同じ方法で、それを数値変数に入れたい(一意の識別子として使用するため)。someObject

これをどのように行うことができるか考えていますか?組み込みメソッドはありますか?

4

3 に答える 3

12

「メソッド」は必要ありません。キャスト演算子を探しています:

uintptr_t pointer_as_integer = (uintptr_t)someObject;

しかし、あなたは本当にこれをすべきではありません。

于 2013-02-20T18:04:20.500 に答える
3

-(NSUInteger)hash代わりに、NSObjectのメソッドを確認することをお勧めします。ただし、本当に必要な場合は、ポインタはすでに整数であり、16進数は整数を読み取るための単なる形式です。

NSLog("%x",(int)someObject);
于 2013-02-20T18:14:34.677 に答える
3

他の人は、住所の整数値を取得する方法を示しました。私はsomconsidarationsを追加したいと思います。

オブジェクトが存続している限り、ポインタはすでに一意です。そして、ssonとして、オブジェクトの割り当てが解除されると、ポインタから派生した一意の識別子は使用されなくなります。実際、アドレスがすでに再利用されている割り当てられたオブジェクトの識別子がある場合は、害を及ぼす可能性があります。

オブジェクトをコレクションに追加するか、オブジェクト自体に保証された一意のIDを追加することで、オブジェクトをより適切に追跡できます。そのためにはUUIDが適しています。

そのための実装:

-(NSString *)uuid
{
    CFUUIDRef uuid = CFUUIDCreate(kCFAllocatorDefault);
    NSString *uuidStr = (__bridge_transfer NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuid);
    CFRelease(uuid);
    return uuidStr;
}
于 2013-02-20T18:29:17.140 に答える