获得NSTimer目标的返回值

时间:2009-03-01 02:02:38

标签: objective-c cocoa return nstimer

我有一个NSTimer,设置如下:

[NSTimer scheduledTimerWithTimeInterval:0.5 target:timerTarget selector:NSSelectorFromString(targetSelector) userInfo:nil repeats:YES];

如何获取timerTarget方法的返回值?

3 个答案:

答案 0 :(得分:5)

你在做什么回报值?目标在0.5秒后异步运行。对scheduledTimerWithTimeInterval:target:selector:useInfo:repeats:的调用立即返回,此时目标尚未运行。如果你现在真的需要返回值 ,那么不要打扰计时器,只需正常调用选择器。

答案 1 :(得分:5)

你不能,因为没有回报价值。

documentation of the scheduledTimerWithTimeInterval::::: method

  

选择器必须具有以下签名:

- (void)timerFireMethod:(NSTimer*)theTimer

现在,可以以不同的方式声明您的方法,然后在其中返回一个值,但是您的方法具有与NSTimer期望的不同的签名。这个现在可以正常工作,但不能保证在将来工作 - 它可能随时中断,尤其是运行时的更改。

更重要的是,由于NSTimer并不期望返回值,因此它没有规定接收一个并在任何地方传递它。

此外,正如我在评论Adam的答案时所说,你对scheduledTimerWithTimeInterval:::::的回复只返回一次,并且(正如亚当所说)立即这样做。你没有每0.5秒获得一个返回值,因为你没有每0.5秒获得一次返回 - 你只得到一次返回 (每个计时器)。

无论您在计时器方法中发现什么信息,您都需要在那里采取行动,或者将信息从那里发送到另一种方法。

答案 2 :(得分:1)

跟进Adam的好答案,如果您觉得在完成运行后需要返回目标方法的值,那么您可能想要做的就是让目标方法本身延续一些进一步的操作。

例如,您可以使用“userInfo”参数传递对感兴趣对象的引用(self?)。然后,目标方法可以使用预先安排的选择器将更新的值发送给self,而不是返回值。例如,在您的目标方法中,您可以使用以下内容结束:

[[theTimer userInfo] setWhatever:blah];

从概念上讲,您需要采纳Adam的建议并考虑以下事实:计时器调用的方法将来会发生,如果您想要连接回特定的类及其工作流程,您需要以某种方式连接它自己