I created a new project in Xcode 8 using the Master Detail Application template w/ Core Data, and the sample code uses the viewContext to fetch data. Isn't this wrong? If it isn't, what am I misunderstanding?
The context is highly efficient and is designed to be used from the main thread. I suppose the main reason it is used so the objects in the context can be accessed for use updating the views. Then also say you make changes to the data from the UI, if that wasn't done on the main thread then you wouldn't be able to notify the user about save or validation errors and your data and UI would go out of sync and to resolve that would require a very complicated architecture.