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