虽然我通常使用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以防万一有新的工作可用。我很感激你的意见。
感谢。
答案 0 :(得分:2)
[[NSRunLoop currentRunLoop] run]
是你想要的,但它将永远存在,所以你只需要调用一次(不是循环)。你可以:
[[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: JIFFY_TIME]
,并像你写的那样在while()
循环中轮询退出条件。