Как использовать NSRunLoop и executeSelector?
Я пытаюсь выяснить, как работает NSRunLoop. Итак, есть несколько отложенных задач, и я хочу выполнить их за несколько секунд, используя NSRunLoop. И я хочу создать NSRunLoop вручную. Как я должен это сделать?
NSRunLoop *loop = [NSRunLoop currentRunLoop];
//create delayed tasks
[object performSelector:NSSelectorFromString(@"firstMethod") withObject:firstArgument afterDelay:5.0];
[object performSelector:NSSelectorFromString(@"secondMethod") withObject:secondArgument afterDelay:3.0];
//and here I must run a loop
while(flag&&[loop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);
А также я должен как-то остановить этот цикл. Как вы видите, я совершенно сбит с толку, и многие документы и темы Apple здесь не помогли.
1 ответ
На вопрос и комментарии:
Конечно, они никогда не выполняются. -performSelector:…
присоединен к текущему циклу выполнения потока. Этот цикл выполнения никогда не достигается, потому что ваша программа застряла в вашем частном цикле выполнения.
Более того, присоединить цикл выполнения к потоку просто невозможно:
Ваше приложение не может ни создавать, ни явно управлять объектами NSRunLoop. Каждый объект NSThread, включая основной поток приложения, имеет объект NSRunLoop, автоматически создаваемый для него при необходимости. Если вам нужен доступ к циклу выполнения текущего потока, вы делаете это с помощью метода класса currentRunLoop.