我有一个 NSTimer,它的设置如下:
[NSTimer scheduledTimerWithTimeInterval:0.5 target:timerTarget selector:NSSelectorFromString(targetSelector) userInfo:nil repeats:YES];
如何获取timerTarget
方法的返回值?
我有一个 NSTimer,它的设置如下:
[NSTimer scheduledTimerWithTimeInterval:0.5 target:timerTarget selector:NSSelectorFromString(targetSelector) userInfo:nil repeats:YES];
如何获取timerTarget
方法的返回值?
你对返回值做了什么?目标在 0.5 秒后异步运行。调用立即scheduledTimerWithTimeInterval:target:selector:useInfo:repeats:
返回,此时目标尚未运行。如果您现在确实需要返回值,那么不要打扰计时器,只需正常调用选择器即可。
你不能,因为没有返回值。
Quoth方法的文档scheduledTimerWithTimeInterval:::::
:
选择器必须具有以下签名:
- (void)timerFireMethod:(NSTimer*)theTimer
现在,您可以以不同的方式声明您的方法,然后在其中返回一个值,但是您的方法具有与 NSTimer 期望的不同的签名。现在可以正常工作,但不能保证将来可以正常工作——它可能随时中断,尤其是运行时的更改。
更重要的是,由于 NSTimer 不期望返回值,因此它没有规定可以接收一个并将其传递到任何地方。
此外,正如我在对亚当的回答的评论中所说,您的电话scheduledTimerWithTimeInterval:::::
只返回一次,并且(正如亚当所说)它会立即返回。你不会每 0.5 秒得到一个返回值,因为你不会每 0.5 秒得到一个返回值——你只得到一个返回值(每个计时器)。
Whatever information you're finding out in your timer method, you need to either act on it there or send a message with the information from there to another method.
跟进亚当的好回答,如果您觉得在目标方法完成运行后需要它的返回值,那么您可能想要做的是让目标方法本身继续执行一些进一步的操作。
例如,您可以使用“userInfo”参数传递对感兴趣对象(self?)的引用。然后,目标方法可以使用预先安排的选择器将更新的值发送给自身,而不是返回值。例如,在您的目标方法中,您可以以以下方式结束:
[[theTimer userInfo] setWhatever:blah];
从概念上讲,您需要听取 Adam 的建议,并考虑计时器调用的方法将在未来发生的事实,如果您想连接回特定的类及其工作流,您需要自己以某种方式连接它。