performSelectorOnMainThread:withObject:waitUntilDone:
часто является самым простым способом обновления пользовательского интерфейса с помощью прогресса фонового потока. Вы также можете создать свою собственную область хранения, к которой можно безопасно обращаться между потоками, используя NSLock или аналогичный механизм, или даже использовать распределенные объекты (которые также работают между процессами или по сети).
Тогда есть NSOperationQueue и NSOperation, которые очень помогают упростить многопоточное программирование, хотя многие программисты избегают его, так как это может вызвать сбой при определенных обстоятельствах под Leopard.