Я начинаю понимать RunLoop как аналог Очереди событий в Java. Wgat, который я сейчас пытаюсь сделать, просто для лучшего понимания, это создать фоновый поток в приложении, которое запускает собственный RunLoop. Я дошел до этого в примере ViewController, а затем застрял:
@implementation iPhoneRunLoopsViewController
-(void) workerMain
{
[[NSRunLoop currentRunLoop] run];
}
- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle
{
worker = [[NSThread alloc] initWithTarget:self selector:@selector(workerMain) object:nil];
[worker start];
}
- (IBAction)go:(id)sender {
}
Согласно документам Apple:
Перед запуском цикла выполнения на
вторичный поток, вы должны добавить в
хотя бы один входной источник или таймер к нему.
Если цикл выполнения не имеет
источники для мониторинга, он выходит
сразу, когда вы пытаетесь запустить его.
Примеры того, как добавить источники в
цикл выполнения, см. «Настройка цикла выполнения»
Источники «.
Я пытаюсь запустить пользовательский поток в моем методе init, который будет использоваться для произвольной работы. Я хотел бы отправить работу из метода "go" в этот произвольный поток. Чего я не знаю, так это как отправить работу в RunLoop из чего-то вроде метода go, который будет связан с кнопкой Go. Допустим, я хочу считать от 1 до 10 с небольшой задержкой между каждым шагом из этого вторичного потока. Я бы добавил код в метод go, чтобы запланировать работу, используя RunLoop вторичного потока, выполняя что-то вроде executeOnThread ... Кеширую ли я ссылку на этот цикл выполнения при запуске? Как мне запустить цикл выполнения и заставить его ждать работы? (Как мне настроить цикл выполнения с пользовательским источником ввода?) Видимо, метод run просто вернется, если для цикла выполнения нет таймера или источника ввода. Я видел документацию, в которой обсуждается, как создавать собственные источники с использованием функций CF, но я не вижу четкого примера того, как все это объединяется. Может кто-нибудь помочь?