我已经读过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”吗?如果是这样,在什么情况下?
由于
答案 0 :(得分:6)
没有。看看docs。引用:
选择器必须具有以下签名:
- (void)timerFireMethod:(NSTimer*)theTimer
没有参数的方法的选择器是错误的。要传递的论点是 计时器,所以你可以做一些事情,比如区分哪个计时器向你发射 方法(如果多个计时器调用相同的方法)。
目标可以是实现给定方法的任何对象。有时你可能 想要一个特定的对象(除了self)在计时器触发后执行任务。
这正是您正在寻找的。 userInfo
可以是任何对象,也许是
数据容器,NSValue或任何其他东西。用这个来传递额外的东西
您的方法的信息将提取如下:
- (void)timerFireMethod:(NSTimer*)theTimer
{
id info = [theTimer userInfo]; /* give it an appropriate type */
...
}