我正在使用OC和Swift测试NSTimer。当我用OC写字时,这里有些我不太明白的事情:在计时器启动后是否需要将定时器添加到NSRunLoop?如果不需要,即使我将重复设置为YES,为什么不能在循环中调用它?
这是我的代码,我只是初始化一个计时器并将重复设置为YES,我期望的是代码timerTick:
应该每2秒调用一次,但它并不像我期望的那样工作。 ..直到我将计时器添加到NSRunLoop。
OC:
-(void)viewDidLoad {
[super viewDidLoad];
NSTimer *timer = [NSTimer timerWithTimeInterval:2 target:self selector:@selector(timerTick:) userInfo:nil repeats:YES];
}
-(void) timerTick:(NSTimer*) timer{
NSLog(@"ticked,%@",@"aa");
}
我用Swift重写了相同的代码
正如您所看到的,我没有将计时器添加到NSRunLoop
,但它按预期工作:{2}每隔2秒调用runTimeCode
方法。
var timer:NSTimer!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
timer = NSTimer.scheduledTimerWithTimeInterval(2.0, target: self, selector: "runTimeCode", userInfo: nil, repeats: true)
}
func runTimeCode(){
NSLog("ticked")
}
我的问题
在使用NSTimer的iOS9.2的OC中是否有任何错误?我和谷歌搜索了很多,但是如果你想让计时器正常工作的话,我没有找到任何要求说它是必需的。 How do I use NSTimer?
OC和Swift之间的NSTimer
使用情况有何不同?
答案 0 :(得分:2)
首先,您使用的是不同的方法。你怎么会得到相同的结果?初始化后,scheduledTimerWithTimeInterval
会自动添加到NSRunLoop
。但是,timerWithTimeInterval
赢了。您需要手动调用fire
或将其添加到NSRunLoop
才能触发它。
就像方法'名称均值,scheduledTimerWithTimeInterval
将为您安排。至于timerWithTimeInterval
,它只是给你一个计时器。 Apple的名字很受限制。有时候,你可以根据它来猜测它的目的。
答案 1 :(得分:0)
使用Objective-C,您应该尝试这种方法:
NSTimer *timer = [NSTimer scheduleTimerWithTimeInterval:2 target:self userinfo:...];
您可以在Xcode中查看所有方法的内容。