просто пытаюсь выяснить, что было бы лучшим способом разработать такую функциональность? По сути, я посылаю асинхронный NSURLConnection, который попадает на сервер, который отправляет обратно кучу данных. Как только я получу данные, мне придется выполнить над ними некоторую работу, которая будет довольно дорогой и которую я бы предпочел сделать в потоке bg, чтобы предотвратить блокировку пользовательского интерфейса. И, наконец, мне также необходимо динамически обновлять подходящее обновление, поскольку ответ от сервера принимается и обрабатывается.
Мой вопрос: как мне выполнить эту работу в фоновом потоке , когда данные поступают так, чтобы таблица не дожидалась загрузки всех данных перед обновлением?
Это мой псевдокод, который у меня есть. В моем ViewController у меня было бы два BOOL-флага newDataReceived и dataFinishedDownloading. У меня также будет две переменные: строка, содержащая текущие данные, и nsarray, в котором хранятся результаты обработки данных. Тогда,
- в didReceiveResponse: я бы породил новый поток, вызвав executeSelectorInBackground: с методом обработки в качестве селектора.
- в этом методе у меня будет цикл, который сначала проверяет newDataReceived, чтобы увидеть, поступили ли новые данные, и если да, то поработать над ними.
- После завершения обработки я бы установил nsarray с результатами, а затем вызвал другой метод, который обновляет источник данных таблицы и перезагружает таблицу с помощью executeSelectorOnMainThread:
- Наконец, я бы проверил флаг dataFinishedLoading, чтобы увидеть, есть ли еще данные для обработки
- если все еще есть данные и все начнется заново, в противном случае очистите поток и выйдите из
Также в didReceiveData будет установлен флаг newDataReceived: а также фактические полученные данные. Наконец, в didFinishLoading я бы установил флаг dataFinishedLoading, чтобы сигнализировать, что все данные были загружены.
Я планирую использовать NSLock в # 2-4 при проверке флагов состояния, а также при получении и установке полученной строки данных и результатов nsarray.
Я уверен, что есть несколько способов сделать то же самое, но кажется ли это хорошим способом сделать это?
ТНХ