Objective-C:NSTimer选择器

ach*_*ral 0 iphone timer objective-c

是否可以启动计时器并使用多个参数传递选择器方法?

下面是一个工作计时器的简单示例:

gameTimer = [NSTimer scheduledTimerWithTimeInterval:0.5
                                             target:self
                                           selector:@selector(gameLoop:)
                                           userInfo:nil
                                            repeats:YES];
Run Code Online (Sandbox Code Playgroud)

选择器方法将被命名 - (void)gameLoop:(NSTimer *)theTimer;

是否可以使用多个参数传递此选择器方法?那么该gameLoop方法还可以处理一个int值和一个bool值?

以下显然不起作用,但可能会突出我所追求的内容:

gameTimer = [NSTimer scheduledTimerWithTimeInterval:0.5
                                             target:self
                                           selector:@selector(gameLoop:NO:75)
                                           userInfo:nil
                                            repeats:YES];

- (void)gameLoop:(NSTimer *)theTimer isRunning:(bool)running numberOfSteps:(int)steps;
Run Code Online (Sandbox Code Playgroud)

sam*_*u_1 12

我不同意两个答案.当然,您可以将您想要的任何信息传递给NSTimer调用的方法.那是什么的

userInfo 
Run Code Online (Sandbox Code Playgroud)

参数是为了!

NSNumber *steps = [NSNumber numberWithInt: 75];   

NSDictionary *info = [NSDictionary dictionaryWithObject: steps forKey: @"steps"];
//Pass any objects in a dictionary for easy extraction.
gameTimer = [NSTimer scheduledTimerWithTimeInterval:0.5
                                         target:self
                                       selector:@selector(gameLoop:)
                                       userInfo: info
                                        repeats:YES];
Run Code Online (Sandbox Code Playgroud)

现在,您可以在选择器中提取userInfo.

- (void)gameLoop:(NSTimer *)theTimer{
    NSDictionary info = [theTimer userInfo];
    NSInteger steps = [[info valueForKey: @"steps"] integerValue];
    //etc...
}
Run Code Online (Sandbox Code Playgroud)