NSTimer与OC的任何错误或变化?

时间:2015-12-13 05:45:35

标签: objective-c cocoa-touch timer nstimer

我正在使用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")
    }

我的问题

  1. 在使用NSTimer的iOS9.2的OC中是否有任何错误?我和谷歌搜索了很多,但是如果你想让计时器正常工作的话,我没有找到任何要求说它是必需的。 How do I use NSTimer?

  2. OC和Swift之间的NSTimer使用情况有何不同?

2 个答案:

答案 0 :(得分:2)

首先,您使用的是不同的方法。你怎么会得到相同的结果?初始化后,scheduledTimerWithTimeInterval会自动添加到NSRunLoop。但是,timerWithTimeInterval赢了。您需要手动调用fire或将其添加到NSRunLoop才能触发它。

就像方法'名称均值,scheduledTimerWithTimeInterval将为您安排。至于timerWithTimeInterval,它只是给你一个计时器。 Apple的名字很受限制。有时候,你可以根据它来猜测它的目的。

答案 1 :(得分:0)

使用Objective-C,您应该尝试这种方法:

NSTimer *timer = [NSTimer scheduleTimerWithTimeInterval:2 target:self userinfo:...];

您可以在Xcode中查看所有方法的内容。