在xcode中,您可以使用po对象查看给定对象的文本表示。是否可以将此文本表示转换为真正的客观c对象?
由于
答案 0 :(得分:6)
我想你可以解析出地址,将它分配给指针,并从内存中检索对象,但 是一个可怕的坏想法,你永远不应该这样做 强>
真正的问题:你想做什么?
答案 1 :(得分:1)
我有一个可以激励你的项目,它在GitHub及其名为NDJSON。基本上,它使用运行时内省来获取对象具有的属性,并使用相同值的json键设置这些属性。您可以执行类似的操作但获取属性值而不是设置。为了帮助无法确定类型的类型,如集合中的对象类型或将json键映射到不同命名的属性,我已经定义了一个非正式协议,它有一些方法可以返回字典映射json键到属性名称或者用于属性名称的类,还有一种方法可以返回要忽略的json键列表,或者是唯一可以接受的键。如果你在git hub上查看我的code,就会有一个名为NDJSONDeserializer的类,它包含这个逻辑。有一个名为getTypeNameFromPropertyAttributes()的函数,它解析出你想要查看的Apples运行时方法property_getAttributes()的字符串结果。
答案 2 :(得分:0)
不,您从po <instance>
看到的代表是-[<instance> debugDescription]
的结果,默认情况下会返回-[<instance> description]
,如http://developer.apple.com/mac/library/technotes/tn2004/tn2124.html中所述。
除非您正在处理的实例恰好提供了自身的序列化形式的描述,否则您就是SOL。大多数对象都没有。
真正的问题,正如戴夫指出的那样,你想做什么? po
仅适用于gdb控制台,因此我认为这是一个调试问题。在这种情况下,您是否知道gdb控制台支持向实例发送消息?所以你可以这样做:
po [<myInstance> methodReturningAnOtherObject]
或
po [<myInstance> valueForKeyPath:@"some.long.key.path"]
从调试器控制台中跟踪对象图。