What\'s the right way to do this? The NSTimer documentation says this:
Special Considerations
You must send this
You should not install an NSTimer on an anonymous worker thread managed by GCD.
Use dispatch timer sources with GCD instead of NSTimer, c.f. dispatch_source_create(3).
NSTimer relies on the current thread's runloop, which is not something that makes sense for a GCD queue. See the WWDC2012 GCD session for more details around GCD and runloop APIs.