这会根据需要每 60 秒重复调用我的选择器:
autoDeleteTimer = [NSTimer scheduledTimerWithTimeInterval:60 target:[SimpleDB class] selector:@selector(autoDelete:) userInfo:nil repeats:YES];
Run Code Online (Sandbox Code Playgroud)
下一行根本不调用它。不是最初也不是 60 秒后:
autoDeleteTimer = [[NSTimer alloc] initWithFireDate: [NSDate dateWithTimeIntervalSinceNow:1] interval:60 target:[SimpleDB class] selector:@selector(autoDelete:) userInfo:nil repeats:YES];
Run Code Online (Sandbox Code Playgroud)
谁能解释为什么?谢谢。
您需要将第二个计时器添加到主循环中:
[[NSRunLoop mainRunLoop] addTimer: autoDeleteTimer forMode:NSDefaultRunLoopMode];
Run Code Online (Sandbox Code Playgroud)
从该方法的文档中:
- (id)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats
Run Code Online (Sandbox Code Playgroud)
返回值:接收器,初始化,当添加到运行循环时,它将在日期触发,然后,如果重复为 YES,则在此之后的每一秒。
您必须使用 addTimer:forMode: 将新计时器添加到运行循环中。触发时,计时器将消息 aSelector 发送到目标。(如果计时器配置为重复,则无需随后将计时器重新添加到运行循环中。)