Питер Хоси прав в отношении блокировки потока пользовательского интерфейса, который часто называют основным потоком. Но я думаю, что его решение запутанно.
Простое решение 1. Вызвать метод, в котором длинный цикл блокировки находится в фоновом потоке, используя:
[self performSelectorInBackground:@selector(longRunningMethod)
withObject:nil];
Простое решение 2. Добавьте метод с длинным циклом блокировки в NSOperationsQueue:
NSOperationQueue* oq = [[NSOperationQueue new] autorelease];
NSOperation* o = [[NSInvocationOperation alloc] initWithTarget:self
selector:@selector(longRunningMethod)
object:nil]
[oq addOperation:o];
[o release];
Срабатывать селекторы в фоновом режиме проще, почти слишком просто, поскольку они могут истощать ресурсы, если используются дико.
Использование NSOperationQueue требует нескольких строк настройки, но в качестве бонуса он повторно использует потоки и применяет другие оптимизации, чтобы использовать меньше ресурсов. Как видно из названия, его также можно использовать для постановки в очередь. Вы можете указать максимальное количество параллельных операций и различные ограничения.