Вы всегда можете обновить модель и таблицу данных на главном потоке. В NSObject есть функции, такие как performSelectorOnMainThread:withObject:waitUntilDone:
, что позволяет вам легко выполнять вызов функции в основном потоке. Таким образом, вы можете обновить модель с:
[model performSelectorOnMainThread:@selector(addObject:) withObject:newObject waitUntilDone:YES];
, а затем обновите TableView с этим:
[tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
Все становится сложнее, если вам нужно передать более одного объекта, потому что тогда вам нужно использовать вызовы, но я обнаружил, что эти функции могут использоваться большую часть времени.
Ну, но моя основная идея заключалась в том, чтобы взять рабочую нагрузку из основной нити. Модель может иметь несколько десятков тысяч элементов списка. И вы можете почувствовать это, когда основная нить блокируется даже на 10 мс. – Lothar
Предположительно, создание объектов в массиве будет занимать больше всего времени, а не вставлять их в массив. Если вы беспокоитесь о загрузке основного потока, добавляющего объекты по отдельности, вы можете добавить несколько файлов за один раз с помощью addObjectsFromArray :. В противном случае, без использования GCD (который вы не можете, если вы делаете приложение 10.5), вам придется использовать NSLock. –