开发者

How to convert Objective C textual (po) representation to real object

开发者 https://www.devze.com 2022-12-23 00:38 出处:网络
In xcode you can use po objectto see a textual representation of a given object.Is it possible toconvert from this textual representation to a real objecti开发者_JS百科ve c object?

In xcode you can use po object to see a textual representation of a given object. Is it possible to convert from this textual representation to a real objecti开发者_JS百科ve c object?

Thanks


I suppose you could parse out the address, assign it to a pointer, and retrieve the object from memory that way, but that IS A HORRIBLY BAD IDEA AND YOU SHOULD NEVER DO THAT.

Real question: what are you trying to do?


I have a project that may inspire you, its on GitHub and its called NDJSON. Basically it uses runtime introspection to get properties an object has and set those properties using a json key of the same value. You could do something like that but get the property values instead of set. To help in situation where the type can not be determined like the type of objects to go in a collection or to map a json key to differently named property I have defined an informal protocol that has some methods that return dictionary mapping json key to property names or class to use for property name, there are also method to return a list of json keys to ignore or alternatively the only keys to accept. If you look at my code on git hub there is a class called NDJSONDeserializer which contains this logic. There is a function called getTypeNameFromPropertyAttributes() which parses out the string result of Apples runtime method property_getAttributes() which you will want to look at.


No, the representation you see from po <instance> is the result of -[<instance> debugDescription], which by default returns -[<instance> description], as described in http://developer.apple.com/mac/library/technotes/tn2004/tn2124.html.

Unless the instance you're dealing with just happens to provide a description which is a serialized form of itself, you're SOL. Most objects don't.

The real question, as Dave points out is, what are you trying to do? po only works in the gdb console, so I assume this is a debugging issue. In that case, do you know that the gdb console supports sending messages to instances? So you can do:

po [<myInstance> methodReturningAnOtherObject]

or

po [<myInstance> valueForKeyPath:@"some.long.key.path"]

to follow the object graph from within the debugger console.

0

精彩评论

暂无评论...
验证码 换一张
取 消