我想将一个十六进制值作为无符号整数传递给使用动态链接的方法。我作为参数传递的值以某种方式被损坏。发生什么事?为什么将unsigned int传递给performSelector会丢失比特?
- (void)callPerformSelector
{
NSNumber *argument = [NSNumber numberWithUnsignedInt:(unsigned int)0xFFFFFFFF];
SEL selector = NSSelectorFromString(@"testPerformSelector:");
NSLog(@"testPerformSelector object %@", argument);
[self performSelector:selector withObject:argument];
}
- (void)testPerformSelector:(unsigned int) arg1
{
NSLog(@"testPerformSelector unsigned int %u", arg1);
NSLog(@"testPerformSelector hex %X", arg1);
}
输出是:
testPerformSelector object 4294967295
testPerformSelector unsigned int 4294967283
testPerformSelector hex FFFFFFF3
这是一个标记的指针。你看到的是数字的低24位,后跟8位标签。 – gnasher729
@ gnasher729谢谢。更新了答案。 – Droppy