使用NSTimer或performSelector在iOS更新中构建实时时钟?

时间:2013-06-24 13:21:56

标签: objective-c nsdate nstimer

我想在标签中显示实时,我找到了两种更新NSDate的方法:

performSelector方法:

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self updateTime];
}

- (void)updateTime
{
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"hh:mm:ss"];
    label.text = [dateFormat stringFromDate:[NSDate date]];

    //call updateTime again after 1 second
    [self performSelector:@selector(updateTime) withObject:self afterDelay:1.0];
}

NSTimer方法:

- (void)viewDidLoad
{
    [super viewDidLoad];

    Timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTime) userInfo:nil repeats:YES];
}    

- (void)updateTime 
{
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"hh:mm:ss"];
    label.text = [dateFormat stringFromDate:[NSDate date]];
}

哪一个是更好,更高效,更可靠的方法?

2 个答案:

答案 0 :(得分:4)

首先,这与Xcode并不完全相关。

其次:性能更高? 认真?当它被称为一秒一次?只是忘记担心效率。

第三,它们是等价的,但我不认为需要类似递归的方法自我调用。只需使用NSTimer,这就是它被发明的原因。

答案 1 :(得分:1)

计时器尽力在“固定”时间表上执行,即每秒执行一次。

另一方面,在执行500ms的函数结束时调用performSelector:afterDelay将导致每1500ms调用一次函数(执行时间为500ms + 1s延迟)

因此计时器更可靠。正如H2CO3所说的那样,忘记性能,这对于这么简单的任务来说都是一个问题。