Относительно использования performselectorinbackground:withObject:
, документация сообщает нам:
Этот метод создает новый поток в вашем приложении, переводя ваше приложение в многопоточный режим, если оно было нет уже Метод, представленный aSelector
, должен настроить среду потока так же, как и для любого другого нового потока в вашей программе. Для получения дополнительной информации о настройке и запуске потоков см. Руководство по программированию потоков .
Намного проще (и эффективнее) просто использовать Grand Central Dispatch если вы хотите запустить какой-либо код в фоновом потоке.
При этом возникает вопрос, почему вы вообще выдвигаете это в фоновый поток. Сетевой код обычно выполняется асинхронно, и в этом случае нет смысла запускать этот код в фоновом потоке. Это только усложнит ситуацию.
Относительно особенностей лога повторов c, это зависит от цели. Некоторые приложения используют одну из библиотек «достижимости», чтобы заранее предупредить пользователя, если он не подключен к сети, но в этом случае вы не будете использовать retry logi c как таковые, а просто будете иметь обработчик, который вызывается после восстановления сети.
Похоже также, что logry c повторных попыток должен быть включен в конце запроса (где вы проверяете, был ли запрос успешным ), а не в самом начале, где вы инициируете запрос.
Кроме того, если вы просто пытаетесь выполнить несколько простых загрузок и загрузок, вы можете рассмотреть возможность использования фона URLSessionConfiguration
, так как он обрабатывает целый ряд проблем (например, проблемы с подключением, пользователь покидает приложение до завершения загрузки / скачивания и т. д. c.).