 <p>I think the best option to to have a class method on <code>HighScoresModel</code> that will access a single, shared instance of the model from any object that needs it.</p> <p>This is superior to the other options because no controller is responsible for instantiating the model, and the controllers are not unnecessarily coupled to the app delegate either.</p> <p>As an example:</p> <pre><code>@interface HighScoresModel : NSObject + (HighScoresModel *)sharedHighScoresModel; ... @end @implementation HighScoresModel static HighScoresModel *SharedHighScoresModel; + (HighScoresModel *)sharedHighScoresModel { if (!SharedHighScoresModel) { SharedHighScoresModel = [[HighScoresModel alloc] init]; } return SharedHighScoresModel; } ... @end </code></pre> <p>Hope this helps!</p>