Прямо сейчас у меня есть более старый код, который я написал много лет назад, что позволяет приложению iOS ставить в очередь задания (отправка сообщений или отправка данных на серверный сервер и т. Д.), Когда пользователь вне форума. Когда пользователь возвращается в Интернет, задачи запускаются. Если приложение переходит в фоновый режим или завершается, очередь сортируется, а затем загружается обратно, когда приложение запускается снова. Я подклассифицировал NSOperationQueue, и мои задания - это подклассы NSOperation. Это дает мне гибкость в том, что для меня предусмотрена структура данных, которую я могу подкласса напрямую (очередь операций), и путем подкласса NSOperation, которую я могу легко запросить, если моя задача не удалась (сервер не работает и т. Д.).Использование GCD для автономной постоянной очереди
Я, скорее всего, оставлю это как есть, потому что, если он не сломался, не исправить это, верно? Кроме того, это очень легкие операции, и я не ожидаю в текущем приложении, над которым я работаю, чтобы в любое время было поставлено очень много задач. Однако я знаю, что есть некоторые дополнительные накладные расходы с использованием NSOperation, а не с использованием GCD напрямую.
Я не верю, что я мог бы подклассифицировать очередь отправки так, как я могу NSOperationQueue, так что для меня будет лишний код, чтобы поддерживать мою собственную структуру данных и загружать ее в & из очереди отправки каждый раз, когда приложение отправлено на задний план, не так ли? Также не знаю, как я буду обрабатывать запрос задания, если он не сработает. Прямо сейчас, если я получаю 500 с сервера, например, в своем операционном коде я отправляю уведомление с глубокой копией неудавшегося объекта NSOperation. Моя пользовательская очередь операций выбирает это уведомление и добавляет задачу к себе. Не знаете, как, если я смогу сделать что-то подобное с GCD. Мне также понадобится простой способ отменить все операции или приостановить очередь, когда сетевое подключение будет потеряно, а затем повторно активировать, когда сетевой доступ будет восстановлен.
Просто надеемся получить некоторые мысли, мнения и идеи от других, которые могли бы сделать что-то подобное или более знакомы с GCD, чем я.
Также стоит отметить, что в iOS 7 есть новая поддержка фоновых задач, но скорее всего это будет моя цель развертывания. Я также не уверен, если он точно сделает то, что мне нужно, поэтому на данный момент просто смотрим на возможность GCD.
Спасибо.
Хотя я уверен, что это можно сделать, вот несколько мыслей с головы. '1.' GCD не имеет встроенной поддержки для отмены; вам придется сворачивать самостоятельно. '2.' Легкое подклассу, например 'NSOperationQueue', поэтому вам придется вести список операций отдельно, а не в вашем подклассе, и это может быть будущим источником ошибок. '3.'' NSOperationQueue' использует 'GCD' изнутри iOS 4+. '4.' Зачем переписывать что-то, что не сломалось? –
Да, ваша точка 4 - это то, что я сказал сам. И да, NSOperationQueue использует GCD под обложками. Я также знаю, что проще всего работать с самым высоким уровнем абстракции, но с некоторыми накладными расходами. Я не пытаюсь решить проблему, которой у меня нет, то есть я не вижу проблем с производительностью, а просто проверяю, так как это более старый код, если имеет смысл обновлять и если что-то мне не хватает в мой более ограниченный опыт работы с GCD, который облегчил бы рефакторинг, чем казалось бы. Скорее всего, уйдет. Благодарю. – fogwolf