Как использовать NSRunLoop в Objective-C? - PullRequest
4 голосов
/ 07 декабря 2009

как использовать, как использовать NSRunLoop в target-C и ждать, пока какая-то переменная изменит значение?

Спасибо

Ответы [ 2 ]

5 голосов
/ 07 декабря 2009

Обычно мы не будем использовать NSRunLoop в производственной среде для ожидания изменения переменной. Можно использовать обратный вызов.

Однако в коде модульного теста у нас есть следующее:

NSDate *twoSecondsFromNow = [NSDate dateWithTimeIntervalSinceNow:2.0];
    while (!callBackInvoked && !errorHasOccured && runCount-- &&  [[NSRunLoop currentRunLoop]  runMode:NSDefaultRunLoopMode beforeDate:twoSecondsFromNow]) {
        twoSecondsFromNow = [NSDate dateWithTimeIntervalSinceNow:2.0];
    }

Код ожидает, пока не будет вызван наш обратный вызов, произошла ошибка или произошло 2-секундное ожидание. Мы используем это для тестирования делегатов, которые делают обратные вызовы.

Как я уже сказал, я бы не стал делать это в рабочем коде.

1 голос
/ 07 декабря 2009

Как правило, вы не используете NSRunLoop непосредственно в своем коде.

Например, вы бы создали GUI приложение, в котором уже есть NSRunLoop (используйте предопределенные шаблоны кода приложения в Xcode).

Это зависит от того, какая переменная должна измениться, она может находиться где-то внутри вашего объекта «Модель», и она будет изменена некоторыми, даже такими, как данные, поступающие в режиме онлайн, или связанные с объектом графического интерфейса и действиями пользователя.

  • Если это кнопка, вы бы настроили обработчики для вызова действия.
  • Если это переменная, вы бы настроили KVC / KVO для обнаружения изменений и вызова обработчик.

И так далее, Cocoa будет обрабатывать клейкий код для вас, вам просто нужно настроить соответствующую обработку для выполнения действия.

Недостаточно деталей в вашем вопросе, я бы посоветовал взглянуть на базовый учебник на сайте Apple для разработчиков , чтобы увидеть, что доступно в Какао.

...