【发布时间】:2015-06-17 03:03:18
【问题描述】:
所以,很容易得到一个对象指针的“内存地址”,呵呵..
id x = @"obj"; printf("'x' is at: %p", x);
'x' is at: 0x100b60048
令人惊讶的是,我似乎找不到任何关于如何执行“反向”操作的参考。 IE。通过十六进制 int 指针地址或字符串表示获取对对象指针的引用...
NSString * ptr = @"0x100b60048";
unsigned addr = 0;
NSScanner * scn = [NSScanner scannerWithString:ptr];
[scn scanHexInt:&addr];
我确实遇到了以下“方式”,但它 a) 不起作用(它崩溃了)并且 b) 激怒了编译器脆弱的敏感性(也就是它发出警告,哈哈)。
id z = (__bridge id)((void*)addr);
那么,什么是“正确的”、现代的、兼容 ARC 的方法呢?
【问题讨论】:
-
我想唯一正确的方法是:不要这样做。但是我可以问一下你需要它吗?
-
这听起来非常危险。你为什么要这样做?
-
我确实对内容有一个真正的问题:你仍然没有解释,为什么你会传递字符串而不是指针/对象本身。如果您可以向我们展示真正的需求,我会说您的架构已损坏,应该予以修复。
-
如果对象还不存在,你怎么知道它的地址?? (我怀疑你有一些严重的误解。)
-
@alexgray 不,通过使用地址作为字符串来表示对象然后将该字符串转换回引用不是归档、DO 或 ObjC 运行时的工作方式.当你在一个应用程序中谈论不同的应用会话、不同的机器甚至不同的文档时,从字符串到引用的转换将会失败。
标签: objective-c pointers memory-management runtime nsobject