如何使用Object参数将NSTimeInterval对象传递给detachNewThreadSelector?

时间:2010-06-20 16:01:54

标签: objective-c cocoa nsthread nstimeinterval

我还是Objective C语法的新手,所以我可能会过度复杂,但我似乎无法弄清楚如何将NSTimeInterval传递给线程。

我想启动一个休眠从主线程发送的x秒参数的线程,如下所示:

[NSThread detachNewThreadSelector:@selector(StartServerSynchThread) toTarget:self withObject:5];

- (void) StartServerSynchThread:(NSTimeInterval *)sleepSecondsInterval {

    [NSThread sleepForTimeInterval:sleepSecondsInterval];

}

但编译器一直给我一个语法错误。我不确定应该怎么做。任何帮助,将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:12)

这与@ Georg的答案几乎完全相同,但使用的是正确的类型。 :)

如果您将NSTimeInterval装入NSNumberNSValue的子类),则可以将其传入:

[NSThread detachNewThreadSelector:@selector(startServerSynchThread:) 
                         toTarget:self 
                       withObject:[NSNumber numberWithDouble:myTimeInterval]];

- (void) startServerSynchThread:(NSNumber *)interval {
  [NSThread sleepForTimeInterval:[interval doubleValue]];
}

答案 1 :(得分:2)

object参数具有id类型,这意味着只能传递类型对象。整数,例如您要传递的5,以及NSTimeInterval(实际上只是typedef的{​​{1}}),是基本类型,而不是类类型。< / p>

您可以使用double作为包装,或者传递NSNumber