This is an old revision of the document!
There are three methods of storing data to a device so that it persists through app or phone shutdowns:
NSUserDefaults- a dictionary stored to the device's internal memory. Any object can be stored under given keys, but you must implement the <NSCoding> protocol for custom objects before committing them to memory
CoreData- local database wrapper, backed by sqlite3. Not technically a relational database, but abstracts away a lot of configuration details
Plist files- property list files, essentially dictionaries written out to files in the form of key/value pairs
They all accomplish the same task: storing items on the device's hard drive. Objects living in memory (that you alloc/init) live in RAM and will not stick around if the app crashes or is terminated.
-NSUserDefaults- officially to be used for “defaults” information, or saved information about the user's behavior or preferences, but in practice can handle 1000-100,000 object transactions without impacting performance. Minimal code required. Easiest to use.
CoreData- efficient, optimized, and filled with shortcuts, useful for large or small data sets. Contains a system for managing the entire model in a graphical way. Requires no knowledge of databases. More difficult to setup. Can transfer database file away from app with some difficulty.
Plist files- least efficient, cannot handle large transactions without impacting performance. Difficult to setup, not commonly used. Can move plist file around fairly easily, useful when including data with app without using CoreData.