Использование NSRunloop для исключения кода, управляемого событиями

Я использую NSUrlConnection для создания http-запросов. Я хочу избежать кода, управляемого событиями, поэтому я использую NSRunloop следующим образом:

NSURLRequest *request = [[NSURLRequest alloc] initWithURL: [NSURL URLWithString:_urlString] cachePolicy: NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval: 10 ]; NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; if(!connection) { DebugLog(@"Creating a connection has failed"); [self setValidationRequestResult:false]; } else { NSRunLoop* currentRunLoop = [NSRunLoop currentRunLoop]; [self.connection start]; while (self.isConnectionComplete == NO) { NSDate* dateLimit = [NSDate dateWithTimeIntervalSinceNow:0.05]; [currentRunLoop runUntilDate:dateLimit]; } //TODO: check release of NSUrlConnection } } // Now perform remaining tasks ........ 

Это нормально для NSRunLoop, как показано выше, или мы должны отправлять уведомления в «didFailWithError» и «connectionDidFinishLoading» для написания логики после завершения HTTP-запроса?

Хотя этот подход может быть технически корректным, я бы посоветовал вам спросить, почему вы хотите это сделать.

NSURLConnection был разработан, чтобы прикрепить себя к runloop, чтобы runloop мог продолжить и не связать эту нить.

То, что я сделал в своих приложениях, – это класс, предназначенный для управления моим сетевым кодом, а также делегирование обратных вызовов или передача блоков для обработки. Вы упомянули использование уведомлений, и это тоже хорошая идея.

Это характер асинхронного сетевого кода. Это делает код немного сложнее, но ваше приложение будет лучше.

  • Отчеты о сбоях в Firebase: ошибка при сбое передачи: ошибка 403
  • Что такое профиль Bluetooth iBeacon
  • Приложения iOS разделяют рамки?
  • Внедрите липкий заголовок, например, в UITableView
  • Как сделать изображение с Карт Google для iOS, когда пользователь не видит карту
  • Ошибки Linker в проекте Swift с Google Maps для iOS, добавленными через CocoaPods
  • Глубокое соединение с профилем пользователя в facebook iOS App post Graph API v2.0
  • Тестирование Google Analytics на iOS
  • пример api iOS для Google
  • Включает ли расширение Keychain Sharing ваш AppID?
  • В iOS, каков тип возврата buf с помощью 'sysctlbyname ("net.inet.tcp.pcblist", buf, & len, 0, 0)'?
  • Interesting Posts

    Как сделать пакеты, установленные с CocoaPods доступными для ВСЕХ проектов в моей рабочей области?

    Как вы можете создать пользовательский объект в палитре объектов Interface Builder?

    Как выравнивать текст кнопки влево?

    Как открыть модальный с помощью UITabBarController и при закрытии отобразить отображение последней панели вкладок?

    Приложение продолжает запрашивать пароль для использования брелка «Local Items»

    изменение размера фрейма UITableViewCell

    Как вы используете оболочку связки ключей для слесаря

    Можно ли использовать .a библиотеку в быстром проекте

    Выполнение телефонного звонка в приложении iOS

    Есть ли способ отключить Game Center для приложения iOS?

    API App Store для заметок / обновлений выпуска

    iOS7: MKnnotation centerOffset?

    Ускоренный обзор – отправить снова или нет? приложение ios

    Отрегулируйте положение элемента кнопки панели при использовании больших заголовков с iOS 11

    Как я могу отслеживать точку в текстуре в OpenGL ES1?

    Давайте будем гением компьютера.