I have to disagree on TechZen's list. Number 3 is only a right answer if you are dealing with a legacy SQLite database. There is never a reason to choose raw sqlite over Core Data. Core Data will perform better in nearly every situation and will reduce the amount of code you have to write by a significant amount.
In addition, I would caution against using plists. They are expensive to read and write and a Core Data database will outperform them in nearly every situation.
As for using Core Data, you should always use a SQLite back-end (XML is not available on iOS) except in the most extreme circumstances.
In short, if you are saving a single value, store it in NSUserDefaults
.
Otherwise use Core Data.
Update
There is one SINGLE thing that cannot be done with Core Data more performant than raw SQLite currently. That is the ability to update a single column's values across tens of thousands of rows. That is because to modify a row, Core Data loads that row into memory and then writes it back out again.
For every other situation you are going to gain better performance with Core Data than you are writing your own accessors, objects and dealing with the memory and lifecycles thereof.
Core Data will outperform any data accessors that you are going to write yourself and it is going to handle writing to and reading from the underlying file in a better manner than you are. Why re-invent the wheel?