Достижимость кода блокирует основной поток - PullRequest
4 голосов
/ 26 сентября 2011

В настоящее время я работаю над приложением, которое требует от меня проверки доступности.

Благодаря этому я начал искать вещи и нашел DDG и код Apple. Я решил использовать последний код доступности Apple.

Я импортировал это, и, как предложено в примере Apple, я придумал следующий способ регистрации:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationHandler:) name:kReachabilityChangedNotification object:nil];

    //check for local connection and start notifier
    client = [[Reachability reachabilityForInternetConnection] retain];
    [client startNotifier];

    //check for server connection and start notifier
    server = [[Reachability reachabilityWithHostName:SERVER_HOST_NAME] retain];
    [server startNotifier];

    //check for other server and start notifier
    otherServer = [[Reachability reachabilityWithHostName:OTHER_SERVER_HOST_NAME] retain];
    [otherServer startNotifier];

Когда я запустил приложение, я заметил, что этот код начал блокировать пользовательский интерфейс (основной поток). Я не мог взаимодействовать с другими элементами пользовательского интерфейса, пока не было разрешено имя хоста. Теперь я знаю, что Apple сделала предупреждение о разрешении DNS и делает его асинхронным.

Мой вопрос будет таким: как мне сделать это асинхронным?

Я порождаю другой поток и поддерживаю его работу, чтобы не "освободить" объект Reachability?

Заранее спасибо за помощь! :)

1 Ответ

4 голосов
/ 28 сентября 2011

Хорошо.Ну, я выяснил, в чем проблема.> _ <</p>

Код, указанный выше , действительно работает асинхронно.

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

Еще раз спасибо!

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