Deep Copying of NSArray/NSDictionary/Any Object
When you use [array copy] or [array mutableCopy], you expect to get a complete new copy of the array/dictionary.
However, it doesn’t work that way.
Doing so will only gives you a shallow copy. What you usually want is a deep copy – that is to copy every object nested within.
Level 1 copies
If your array has only 1 level (it is not nested), then you can use this:
1
| |
Nested levels copies
But if you have an array nested in array.. then you need true deep copy, as Apple mentioned:
1
| |
NSKeyedArchiver will tranverse and archive all objects (which must conform to <NSCoding), then later unarchive to get a new copy.
NSCoding
If you have custom objects/models in the array, then you need to implement the protocol <NSCoding> (not NSCopying).
Note: NSArray, NSDictionary and other primitive types are already NSCoding-compliant.
There are 2 methods that you need to implement, which are just boring-tedious-code to declare which properties to be encoded, and later decoded and init with.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |