iOS - 从包含地址的NSString获取指针

Wil*_*sch 5 iphone pointers objective-c ios

如果我有一个指向对象foo的指针,地址(比方说)0x809b5c0,我可以通过调用将其转换为NSString

NSString* fooString = [NSString stringWithFormat: @"%p", foo].
Run Code Online (Sandbox Code Playgroud)

这将给我NSString @"0x809b5c0".

扭转这一过程最简单的方法是什么?也就是说,从fooString开始,然后返回指向foo的指针.

hfo*_*sli 9

完整性......

地址字符串

NSString *foo = @"foo";
NSString *address = [NSString stringWithFormat:@"%p", foo];
Run Code Online (Sandbox Code Playgroud)

然后回来

NSString *fooAgain;
sscanf([address cStringUsingEncoding:NSUTF8StringEncoding], "%p", &fooAgain);
Run Code Online (Sandbox Code Playgroud)

  • 这实际上有效,但要小心内存管理.将`fooAgain`标记为`__unsafe_unretained`可能是明智之举.当`fooAgain`超出范围时,ARC将发布它.如果指针指向`foo`,`sscanf`将不会保留它.这意味着`foo`将是一个悬空指针,因为当`fooAgain`超出范围时对象被释放. (2认同)

Mac*_*ade 2

将其转换为整数,然后将其转换为它应该是的任何类型......

NSUInteger myInt = [ myStr integerValue ];
char * ptr       = ( char * )myInt;
Run Code Online (Sandbox Code Playgroud)

也就是说,我真的不明白为什么你需要这个......