我正在试图弄清楚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)
致Q和评论:
当然,它们从未被执行过。 -performSelector:…
附加到线程的当前运行循环。永远不会达到此运行循环,因为您的程序卡在私有运行循环中。
此外,将一个运行循环附加到一个线程是不可能的:
您的应用程序无法创建或显式管理NSRunLoop对象。每个NSThread对象(包括应用程序的主线程)都会根据需要自动为其创建NSRunLoop对象。如果需要访问当前线程的运行循环,可以使用类方法currentRunLoop。