NSTimer目标和userInfo参数问题

5St*_*yan 4 parameters methods objective-c selector nstimer

我已经阅读了SO以及查看NSTimer类的Apple文档,看起来创建计时器的最简单方法是使用以下方法:

[NSTimer scheduledTimerWithTimeInterval:15.0
                                 target:self
                               selector:@selector(fireThisMethod:)
                               userInfo:nil
                                repeats:NO];
Run Code Online (Sandbox Code Playgroud)

据我所知,这将创建一个15秒后触发的计时器.将被触发的方法将是传递到"selector"的任何方法(在本例中为"fireThisMethod").由于"重复"是"否",这意味着它只会被触发一次.我的问题是:

1)是否可以将方法传递给具有多个参数的"选择器"?我见过没有任何参数的方法,或者在这种情况下为1(因为方法名后面有":").一个方法如fireThisMethod:anotherParameter:?

2)我不确定我是否真正了解"target"和"userInfo"参数的用途.你会有一个不是"自我"的"目标"吗?你有一个不是零的"userInfo"吗?如果是这样,在什么情况下?

谢谢

sid*_*yll 6

问题1

不.看看文档.引用:

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

- (void)timerFireMethod:(NSTimer*)theTimer

没有参数的方法的选择器是错误的.要传递的参数是计时器,因此您可以执行以下操作:区分从您的方法触发的计时器(如果多个计时器调用相同的方法).

问题2a

目标可以是实现给定方法的任何对象.有时您可能需要特定对象(除了self)才能在计时器触发后执行该任务.

问题2b

这正是您正在寻找的.userInfo可以是任何对象,可能是数据容器,NSValue或任何其他东西.使用此方法将额外信息传递给您的方法,该方法将提取它,如下所示:

- (void)timerFireMethod:(NSTimer*)theTimer
{
    id info = [theTimer userInfo]; /* give it an appropriate type */

    ...
}
Run Code Online (Sandbox Code Playgroud)