iOS: обработка перекрывающихся фоновых запросов - PullRequest
2 голосов
/ 28 мая 2011

В приложении для iOS я пишу класс для обмена сообщениями, выполняю фоновый запрос (через performSelectorInBackground:withObject:), а затем возвращаю результат с помощью метода делегата (который затем будет отображаться на карте).,Кажется, что все работает правильно, когда один запрос происходит одновременно, но я пытаюсь выяснить, как обрабатывать несколько перекрывающихся запросов.Например, если пользователь вводит что-то в поле поиска, которое запускает фоновый поток, а затем вводит что-то еще до завершения исходного фонового потока, как это должно быть обработано?

Есть несколько вариантов (нене позволяйте запустить второй запрос, пока выполняется первый, остановите первый, как только будет запрошен второй, разрешите одновременно выполнять и возвращать независимые результаты и т. д.), но существует ли распространенный / рекомендуемый способ справиться с этим?

1 Ответ

1 голос
/ 28 мая 2011

Я не думаю, что есть универсальный ответ на это. Мое предложение состоит в том, чтобы разделить задачи (в форме NSOperations и / или блоков) по их функциям и отношениям между ними.

Пример: вы не хотите добавлять операцию изменения размера изображения в одну и ту же очередь с получением некоторого несвязанного канала из сети, особенно если между ними нет никакой связи. Или, может быть, вы делаете, потому что оба требуют большого количества памяти и из-за этого не могут работать параллельно.

Но вы, вероятно, захотите добавить операции поиска веб-изображений в ту же очередь, отменяя операции того же типа, добавленные в эту очередь ранее. Каждая из этих операций поиска изображений может инициировать операцию изменения размера изображения и помещать ее в какую-то другую очередь. Теперь у вас есть отношения, и вам нужно отменить изменение размера в дополнение к операции поиска изображений. Что если операция поиска изображения занимает больше времени, чем связанная операция изменения размера? Как вы храните ссылку на это или знаете, когда это сделано?

Да, это легко усложняется, и извините, если я не дал вам никаких конкретных ответов из-за уникальности каждой ситуации, но, в конце концов, заставить их работать как швейцарские часы, очень приятно:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...