Check out lecture 7 of the Stanford CS193P course which is run by Apple engineers.
CS193P - Cocoa Programming | Announcements
They talk about best practices for data flow within your application and specifically, between view controllers. In short, using the application delegate, global variables and singleton methods are all bad practices. Instead, communicate only the data that needs to be communicated to the next view controller via properties or custom initializer methods in the view controller that is being pushed onto the stack.