正确启动/继续runloop的方法

时间:2010-09-16 21:27:12

标签: iphone objective-c

虽然我通常使用NSOperation让线程执行一个简短的任务/操作,但我希望有一个长期存在的专用线程,它总是可以处理某些操作。为此,我分配了一个新的NSThread并使用initWithTarget方法:

- (id)initWithTarget:(id)target selector:(SEL)selector  object:(id)argument

我的理解是传入的选择器应该是线程的主要方法,负责启动runloop。那里有正确的代码是什么?

像这样的while循环是合适的......

(void)newThreadMainMethod {
    while(1) {
      [[NSThread currentThread] run];
    }
}

或者是否有更有效的方法来使线程不占用无限循环的资源?我正在考虑让计时器每0.5秒唤醒一次并在线程上调用run以防万一有新的工作可用。我很感激你的意见。

感谢。

1 个答案:

答案 0 :(得分:2)

[[NSRunLoop currentRunLoop] run]是你想要的,但它将永远存在,所以你只需要调用一次(不是循环)。你可以:

  • 这样做,在/如果适当的时候从运行循环中终止线程
  • 使用[[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: JIFFY_TIME],并像你写的那样在while()循环中轮询退出条件。