我需要的很简单:
与我们可以NSLog("%@",someObject);
或NSString* Hex = [NSString stringWithFormat:@"%p",someObject];
打印内存地址的十六进制值相同的方式someObject
,我想将它放入一个数字变量中(将其用作唯一标识符)。
知道如何做到这一点吗?有什么内置方法吗?
我需要的很简单:
与我们可以NSLog("%@",someObject);
或NSString* Hex = [NSString stringWithFormat:@"%p",someObject];
打印内存地址的十六进制值相同的方式someObject
,我想将它放入一个数字变量中(将其用作唯一标识符)。
知道如何做到这一点吗?有什么内置方法吗?
你不需要任何“方法”。您正在寻找演员表操作员:
uintptr_t pointer_as_integer = (uintptr_t)someObject;
但你真的不应该这样做。
其他人展示了如何获取地址的整数值,我想添加一些考虑因素。
只要对象存在,指针就已经是唯一的。并且作为 sson,作为一个对象被释放,不再使用从指针派生的唯一标识符。事实上,如果您有一个已分配对象的标识符,该地址已被重用,它可能会造成伤害。
通过将对象添加到某个集合或向对象本身添加保证的唯一 ID 来更好地跟踪对象。UUID是一个不错的选择。
一个实现:
-(NSString *)uuid
{
CFUUIDRef uuid = CFUUIDCreate(kCFAllocatorDefault);
NSString *uuidStr = (__bridge_transfer NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuid);
CFRelease(uuid);
return uuidStr;
}
您可能想查看-(NSUInteger)hash
NSObject 上的方法。如果你真的想要,指针已经是整数,而十六进制只是一种读取整数的格式。
NSLog("%x",(int)someObject);