Есть два способа сделать это ..
Во-первых: вы используете NSOperationQueue, который немного объемнее, поскольку он построен на GCD, но имеет некоторые дополнительные функции.
Второе: вы используете GCD (грандиозная центральная диспетчеризация), рассматривая требования. Я бы сказал, что GCD выглядит нормально, так как вы можете легко получить доступ к любому потоку (основному или фоновому), это будет немного быстрее.