NSTimer目标和userInfo参数问题

时间:2011-09-27 20:16:04

标签: objective-c methods parameters selector nstimer

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

[NSTimer scheduledTimerWithTimeInterval:15.0
                                 target:self
                               selector:@selector(fireThisMethod:)
                               userInfo:nil
                                repeats:NO];

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

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

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

由于

1 个答案:

答案 0 :(得分:6)

问题1

没有。看看docs。引用:

  

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

     

- (void)timerFireMethod:(NSTimer*)theTimer

没有参数的方法的选择器是错误的。要传递的论点是 计时器,所以你可以做一些事情,比如区分哪个计时器向你发射 方法(如果多个计时器调用相同的方法)。

问题2a

目标可以是实现给定方法的任何对象。有时你可能 想要一个特定的对象(除了self)在计时器触发后执行任务。

问题2b

这正是您正在寻找的。 userInfo可以是任何对象,也许是 数据容器,NSValue或任何其他东西。用这个来传递额外的东西 您的方法的信息将提取如下:

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

    ...
}