如果重要,我需要这个,特别是当self是UIView子类时。举例来说明我的问题,以下是stmt:
NSLog(@"self: %@", self);
给出以下输出:
<RCLDataView: 0x10971a0b0; frame = (0 0; 0 0); transform = [0, 0, 0, 0, 0, 0]; alpha = 0; opaque = NO; layer = (null)>
我只想要那个地址(0x10971a0b0)而没有剩下的文字。我想我可以(以某种方式)捕获完整的字符串并以某种方式使用NSString方法提取地址。但这看起来真的很难看。有可能直接获取地址,因为NSLog可以获得它。
答案 0 :(得分:2)
NSString *addressString = [NSString stringWithFormat:@"%p", yourString];
unsigned long long address = 0;
NSScanner *scanner = [NSScanner scannerWithString:addressString];
[scanner scanHexLongLong:&address];
NSLog(@"%llx", address); //Prints the address
第一行获取指针地址并将其放入NSString
。
下一行实例化一个无符号长long来保存指针的十六进制值。指针地址表示为64 bits
我认为所以我们需要一个64 bit
值来保存它。我知道int
不够大,但long long
有效。或者,您可以使用uint64_t
,具体取决于您的架构。接下来的两行是提取十六进制值并将其存储在long long
中。 NSScanner
方法是我知道从NSString获取十六进制值的唯一方法所以我只是使用它。最后一行当然是打印值以确保它是正确的。您还可以打印addressString
。