В моем приложении мне приходится иметь дело с большим количеством данных, поступающих из сети, и анализировать их в оптимизированном локальном формате, а затем сохранять их в БД или отправлять их в пользовательский интерфейс, если какой-либо пользовательский интерфейс ожидает этих данных.
Я знаю, что выполнение тяжелой работы по синтаксическому анализу в основном потоке глупо, потому что это заблокирует основной поток и сделает взаимодействие с пользовательским интерфейсом довольно нервным.
Итак, вот что я пытался сделать, чтобы поток пользовательского интерфейса был свободен:
Понизить приоритеты всех потоков, т.е.
NSOperation.threadPriority=0,1;
NSThread.threadPriority=0,1;
dispatch_async (dispatch_get_global_queue (PRIORITY_LOW));
После этих двух шагов пользовательский интерфейс стал намного более плавным, когда какая-то тяжелая работа выполняется в фоновых потоках, но по-прежнему довольно скачкообразным.
Ошибка выглядит следующим образом: когда я довольно быстро прокручиваю таблицу, она внезапно зависает примерно на 0,1 с, а затем продолжает работать так же гладко, как обычно. Во время зависания я вижу в инструментах скачок процессора. Но в представлении отдельного потока я вижу, что основной поток в порядке и почти не потребляет ресурсы ЦП.