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

时间:2011-04-22 14:48:17

标签: iphone objective-c ios pointers

如果我有一个指向对象foo的地址(例如)0x809b5c0,我可以通过调用

将其转换为NSString
NSString* fooString = [NSString stringWithFormat: @"%p", foo].

这将给我NSString @“0x809b5c0”。

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

5 个答案:

答案 0 :(得分:9)

完整性......

致地址字符串

NSString *foo = @"foo";
NSString *address = [NSString stringWithFormat:@"%p", foo];

返回

NSString *fooAgain;
sscanf([address cStringUsingEncoding:NSUTF8StringEncoding], "%p", &fooAgain);

答案 1 :(得分:3)

这段代码对我有用:

NSString *pointerString = @"0x809b5c0";
NSObject *object;
sscanf([pointerString cStringUsingEncoding:NSUTF8StringEncoding], "%p", &object);

答案 2 :(得分:2)

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

NSUInteger myInt = [ myStr integerValue ];
char * ptr       = ( char * )myInt;

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

答案 3 :(得分:1)

根据我的经验,它更容易将指针的地址转换为NSInteger,如下所示:

MyObject *object=[[MyObject alloc]init];
//...
NSInteger adress=(NSInteger)object;

现在反过来:

MyObject *otherObject=(MyObject*)adress;

现在:object == otherObject

答案 4 :(得分:0)

改为使用NSMapTable:

MyClass* p = [[MyClass alloc]init];
NSMapTable* map = [NSMapTable mapTableWithKeyOptions:NSMapTableStrongMemory valueOptions:NSMapTableStrongMemory];
[map setObject:whateverValue forKey:p];
// ...
for(MyClass* key in map) {
// ...
}