Just like a UITableViewController
using it's data source will dequeue cells to load only for what's visible to the user at a given moment instead of initializing cells in memory for all possible entries, Core Data implements a similar strategy for objects in memory.
For any given object, the aspect that consumes the most amount of memory are the object's attributes. By emptying an object of it's attributes Core Data reduces the amount of memory an object requires. It does this by keeping the attributes in the database file, and keeping the "shell" of the object in memory. This kind of empty object is called a Fault.
In fact every Core Data object starts as a Fault, and whenever the user asks for the contents of an object that's when Core Data fetches it's attribute values from the database. Later on if that object and it's attribute values go out of use for a certain period of time Core Data empties its values and the object becomes a Fault again. This process is vital for a device with limited memory like an iPhone.