2015-07-29 2 views
0

Я пытаюсь понять, как работает NSRunLoop. Итак, есть несколько отложенных задач, и я хочу выполнить их через несколько секунд, используя 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 не помогли мне.

+0

Является ли это поток, который вы создали сами? Почему вы пытаетесь запустить цикл запуска вручную? Что случилось с кодом, который вы опубликовали? –

+0

@JoshCaswell, это основная тема. И я читал, что не нужно создавать runloop основного потока, но, как я уже сказал, я хочу выяснить, как это работает. Что касается кода. Он попадает в бесконечный цикл в 'while', и тогда ничего не происходит. –

+0

Создается и запускается основной цикл цикла. Иногда есть причина покрутить его, но это, похоже, не так. Ваши вызовы 'performSelector: ...' вступят в силу, не касаясь цикла выполнения. –

ответ

0

К Q и комментарии:

Конечно, они никогда не выполняются. -performSelector:… присоединен к текущему циклу запуска потока. Этот цикл цикла никогда не достигается, потому что ваша программа застревает в вашем личном цикле запуска.

Кроме того, это просто невозможно, чтобы прикрепить цикл выполнения в теме:

Ваше приложение не может либо создать или явно управлять объектами NSRunLoop. Каждый объект NSThread, включая основной поток приложения, имеет объект NSRunLoop, автоматически созданный для него по мере необходимости. Если вам нужен доступ к циклу запуска текущего потока, вы делаете это с помощью метода класса currentRunLoop.

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSRunLoop_Class/index.html

+0

Нет никакого «частного» цикла запуска. Цикл, который spun_is_ запускает цикл потока, и запускается в режиме по умолчанию, который является режимом 'performSelector: ...', будет выполнять свой метод аргумента в. –

+0

@JoshCaswell Вау, я действительно читал' + alloc- init', может из-за текста выше. Моя вина. Я удалю свой ответ. –

Смежные вопросы