Lazy loading and Core Data
Essence
Lazy loading is a pattern where data is loaded not up front but at the moment of first access. In Core Data it's implemented by faulting: the result of a fetch is a set of placeholder objects (faults) that know only their objectID; attributes are read from the store on the first property access. The same applies to relationships: author.books is a fault on a Set until you iterate it. That's why you can fetch 10,000 records and keep almost nothing in memory.
The rest of this answer, with code and interview follow-ups, is in the DevPrep app.
Read the full answer in DevPrep