Threading on Apple's platforms is interesting because GCD exists and makes doing things concurrently really easy. I think when it came out there was a large push to get all your code off the main thread, spin up queues for background work, use all the new cores in your processor efficiently, but these days I'm seeing a lot more of a walking back of this as people invariably use the primitives incorrectly and shoot themselves in the foot. Data races are easy to create and post-ARC one of the easiest ways to get memory corruption; even when your code is "correct" that doesn't mean that you aren't suffering from performance problems due to priority inversion or thread explosion or poor synchronization primitives. These days, I suggest people keep things on the main thread unless they 1. really have a good reason to move things off of it and 2. understand which primitives they are going to use and what their tradeoffs are.