4

我想在标签中显示实时,我找到了两种更新方法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]];
}

哪一种是更好、更高效、更可靠的方法?

4

2 回答 2

4

首先,这与 Xcode 不太相关。

其次:性能更高?严重地?什么时候每秒调用一次?忘记担心效率。

第三,它们是等价的,但我认为不需要对方法进行类似递归的自调用。随它去吧NSTimer,这正是它被发明的原因。

于 2013-06-24T13:25:24.757 回答
1

计时器尽最大努力按照“固定”时间表执行,即每秒执行一次。

另一方面,performSelector:afterDelay在一个需要 500 毫秒执行的函数结束时调用,将导致您的函数每 1500 毫秒调用一次(执行时间为 500 毫秒 + 1 秒延迟)。

因此定时器更可靠。正如 H2CO3 所说,忘记性能,这样简单的任务是没有问题的。

于 2013-06-24T13:26:35.870 回答