如何使用NSRunLoop和performSelector?

时间:2015-07-29 21:37:11

标签: objective-c 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的许多文档和主题对我没有帮助。

1 个答案:

答案 0 :(得分:0)

致Q和评论:

当然,它们从未被执行过。 -performSelector:…附加到线程的当前运行循环。永远不会达到此运行循环,因为您的程序卡在私有运行循环中。

此外,将一个运行循环附加到一个线程是不可能的:

  

您的应用程序无法创建或显式管理NSRunLoop对象。每个NSThread对象(包括应用程序的主线程)都会根据需要自动为其创建NSRunLoop对象。如果需要访问当前线程的运行循环,可以使用类方法currentRunLoop。

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