Неблокирование ожидает функция в Objective C

AppDomain.CurrentDomain.BaseDirectory

работает с интерфейсом MbUnit.

10
задан Stefan Moser 17 July 2009 в 18:14
поделиться

5 ответов

Если можете, дайте классу метод myObjectLoaded: , который будет вызываться при загрузке рассматриваемого объекта. В противном случае наиболее идиоматическим эквивалентом того, что вы написали выше, является создание таймера, который продолжает проверять myObject и что-то делает, как только находит его.

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

6
ответ дан 3 December 2019 в 22:01
поделиться

NSNotification должно решить проблему.

http://developer.apple.com/documentation/Cocoa/Conceptual/Notifications/Introduction/introNotifications.html

Вместо ожидания объекта, пусть этот объект регистрирует уведомления, поступающие от другого вашего объекта (например, издателя), который заполняет данные асинхронно. Как только этот объект Publisher завершится, пусть он отправит NSNotification, которое затем будет автоматически получено вашим ожидающим объектом. Это также устранило бы ожидание.

3
ответ дан 3 December 2019 в 22:01
поделиться

Похоже, вы ищете образец наблюдателя. Apple называет это « уведомление ».

0
ответ дан 3 December 2019 в 22:01
поделиться

Предполагая, что у вас есть фоновый NSThread, выполняющий эту операцию заполнения, вам может понравиться Метод NSObject performSelector: onThread: withObject: waitUntilDone

0
ответ дан 3 December 2019 в 22:01
поделиться

Это потому, что вы останавливаете основной поток, ожидая загрузки вашего объекта. Не делайте этого, потому что основной поток - это поток, который управляет пользовательским интерфейсом и ожидает ввода пользователя. Если вы блокируете основной поток, вы блокируете пользовательский интерфейс приложения.

Если вы хотите, чтобы основной поток что-то делал при загрузке объекта, тогда создайте метод myObjectLoaded: и вызовите из ваших потоков загрузки:

[myObjectController performSelectorOnMainThread:@selector(myObjectLoaded:) 
                                     withObject:myObject 
                                  waitUntilDone:NO];

где myObjectController может быть любым объектом, даже самим myObject.

0
ответ дан 3 December 2019 в 22:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: