Вместо того, чтобы вручную создавать поток и управлять проблемами безопасности потока, вы можете предпочесть использовать Grand Central Dispatch ('GCD'). Это позволяет размещать блоки, которые представляют собой пакеты кода и некоторые состояния, для выполнения вне основного потока и там, где операционная система считает наиболее подходящим. Если вы создадите очередь для последовательной отправки, вы даже можете быть уверены, что если вы разместите новый блок, а старый еще не завершен, система будет ждать его завершения.
* 1003 Е.Г. *
// you'd want to make this an instance variable in a real program
dispatch_queue_t serialDispatchQueue =
dispatch_queue_create(
"A handy label for debugging",
DISPATCH_QUEUE_SERIAL);
...
dispatch_async(serialDispatchQueue,
^{
NSLog(@"all code in here occurs on the dispatch queue ...");
});
/* lots of other things here */
dispatch_async(serialDispatchQueue,
^{
NSLog(@"... and this won't happen until after everything already dispatched");
});
...
// cleanup, for when you're done
dispatch_release(serialDispatchQueue);
Очень краткое введение в GCD здесь , более подробное введение Apple также стоит прочитать.