ダイナミックリンクを使用するメソッドに、符号なし整数として16進値を渡そうとしています。私がパラメータとして渡す値は、何らかの形で壊れています。何が起こっている?performSelectorに符号なしintを渡すことでビットが失われるのはなぜですか?
- (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