PDA

View Full Version : Encoding vs Array and Dictionary




nashyo
Dec 18, 2011, 03:09 PM
I'm currently being introduced slowly to encoding in Objective C, and I have a fundamental question to ask.

Why would an Object orientated programmer want to encode an object to the file system, instead of create an array or dictionary of objects?

I know there's a sensible answer to this, so please don't think I'm contesting the logic of it.

Thanks
Rob



lloyddean
Dec 18, 2011, 03:43 PM
See the document ObjC Runtime Guide (http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/ObjCRuntimeGuide.pdf), Chapter 6 - "Type Encodings".

jared_kipe
Dec 18, 2011, 05:36 PM
Are you asking why would someone want to "save" an object to load again later?

subsonix
Dec 18, 2011, 05:51 PM
Are you asking why would someone want to "save" an object to load again later?

I was wondering the same thing.

"Why would an Object orientated programmer want to encode an object to the file system"

Sounds like archiving an object to disk.

Sydde
Dec 18, 2011, 11:55 PM
I'm currently being introduced slowly to encoding in Objective C, and I have a fundamental question to ask.

Why would an Object orientated programmer want to encode an object to the file system, instead of create an array or dictionary of objects?

I know there's a sensible answer to this, so please don't think I'm contesting the logic of it.

Thanks
Rob

The way encoding works, the NSKeyedArchiver asks the root object to encode itself. If the root object's -encodeWithCoder: method involves encoding any objects it owns (ivars), they will be encoded into the graph, and any objects those own or reference will be encoded recursively until the entire logical content of the root object is mapped. One advantage would be that no object is encoded more than once, the archiver just encodes cross-references. All this goes into a data object in the form of a binary plist which can then be written to a file or stored in a user defaults entry.

If the complementary -decodeWithCoder: methods are written correctly, NSKeyedUnarchiver can restore the entire object graph using the data object that was archived. This technique allows a much richer and more complex structure to be saved and restored easily and efficiently than you might be able to do with an array or dictionary. Once decoded, you program state is essentially fully restored to what it was when you saved it (except, usually, without the undo stack).

If you look at the documentation for NSArray or NSDictionary, you will see that there are strict limitations on what they can write to a file; encoding lets you get around these limitations.

nashyo
Dec 19, 2011, 10:53 AM
Thanks for all the responses.

Sydde you answered that really well.