我想在标签中显示实时,我找到了两种更新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]];
}
哪一个是更好,更高效,更可靠的方法?
答案 0 :(得分:4)
首先,这与Xcode并不完全相关。
其次:性能更高? 认真?当它被称为一秒一次?只是忘记担心效率。
第三,它们是等价的,但我不认为需要类似递归的方法自我调用。只需使用NSTimer
,这就是它被发明的原因。
答案 1 :(得分:1)
计时器尽力在“固定”时间表上执行,即每秒执行一次。
另一方面,在执行500ms的函数结束时调用performSelector:afterDelay
将导致每1500ms调用一次函数(执行时间为500ms + 1s延迟)
因此计时器更可靠。正如H2CO3所说的那样,忘记性能,这对于这么简单的任务来说都是一个问题。