3

我需要的很简单:

与我们可以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

其他人展示了如何获取地址的整数值,我想添加一些考虑因素。

只要对象存在,指针就已经是唯一的。并且作为 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 回答
3

您可能想查看-(NSUInteger)hashNSObject 上的方法。如果你真的想要,指针已经是整数,而十六进制只是一种读取整数的格式。

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