0

所以我正在编写一个 iPhone 应用程序,其唯一目的是从未来某个日期开始倒计时。这是一个静态应用程序,将是手机上唯一使用的非标准应用程序,将始终是唯一运行的应用程序,并且手机将不断充电(实际上只是放在展示柜中)。如您所见,该应用程序本身非常简单。我唯一担心的是随着时间的推移堆栈会溢出。这是代码中唯一真正做某事的部分

- (void)updateTimeRemaining {
    self.dateComponents = [self.calendar components:NSYearCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit
                                       fromDate:[NSDate date]
                                         toDate:endDate options:0];
    [self.yearsRemaining setText:[NSString stringWithFormat:@"%d", self.dateComponents.year]];
    [self.daysRemaining setText:[NSString stringWithFormat:@"%d", self.dateComponents.day]];
    [self.secsRemaining setText:[NSString stringWithFormat:@"%d", self.dateComponents.second]];
    [self performSelector:@selector(updateTimeRemaining) withObject:self afterDelay:1.0];
}

每周都会保留所有内容,除了永远不会更改的日历(尽管这无关紧要,因为应用程序中没有任何其他视图)。我想这更多的是关于 iOS 垃圾收集的问题。是等待一个不存在的返回值,还是在执行完成后丢弃不需要的方法?

4

1 回答 1

1

我不太确定您提出的代码。一般来说,我发现使用performSelector: afterDelay:是不好的形式。

您是否考虑过+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)seconds invocation:(NSInvocation *)invocation repeats:(BOOL)repeats改用?我想它会更可靠。它还应该返回到运行循环,让垃圾收集等过程自然发生。

Apple在这里有据可查。

于 2013-08-03T22:23:26.823 回答