【问题标题】:using 2 NSTimer in the same UIViewControllers在同一个 UIViewControllers 中使用 2 个 NSTimer
【发布时间】:2011-12-21 23:34:31
【问题描述】:

在我的 viewDidLoad 方法中,我有以下内容:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self repeatRequest];
    [NSTimer scheduledTimerWithTimeInterval:30.0 target: self selector: @selector(repeatRequest) userInfo: nil repeats: YES];
    [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(onTimer) userInfo:nil repeats:YES];
}

下面是被调用的方法:

- (void) repeatRequest{
    NSLog(@"backgroundRequest");
  }

- (void) onTimer{
    NSLog(@"flip pages");
}

问题是一切正常运行了 2 分钟,并且方法被按设置调用......但之后一切都误入歧途,onTimer 方法每秒被调用一次,而不是在 5 秒内调用一次。而且repeatrequest 的调用频率应该更高。有人知道可能是哪个原因吗?

【问题讨论】:

  • 我认为这个视图的另一个代码中存在问题,因为我检查了 1 小时它对我来说很好。

标签: iphone nstimer


【解决方案1】:

听起来您可能正在创建这些计时器的多个实例,可能是因为您的视图实际上被加载了多次。创建计时器时,您可能会输出日志或断点来验证这一点。

您应该保留对您在 viewDidLoad 中创建的计时器的引用,以便您可以在 viewDidUnload 中正确地使它们无效。

【讨论】:

  • [定时器无效]; (您需要在 ivar 或属性中保留对计时器的引用)
【解决方案2】:

你并没有真正给我们太多的信息来处理,但我猜无论出于何种原因,你的 viewDidLoad 方法被多次调用,这导致许多重复的计时器不断调用你的 repeatRequest 和 @ 987654324@ 方法。

您可能想看看为什么viewDidLoad 可能会被多次调用。也看看here。您应该假设viewDidLoad 被允许多次调用。

(要检查这一点,只需将 NSLog(@"viewdidload"); 添加到您的 viewDidLoad 方法中,然后查看调用频率。)

因此,您真正应该做的是将您的 NSTimer 实例存储为 ivars(假设它们分别称为 timer1timer2),然后在调用 viewDidLoad 时检查它们是否已经存在:

if (!timer1) timer1 = [NSTimer scheduledTimerWithTimeInterval:30.0 target: self selector: @selector(repeatRequest) userInfo: nil repeats: YES];
if (!timer2) timer2 [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(onTimer) userInfo:nil repeats:YES];

【讨论】:

    猜你喜欢
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 2013-09-02
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多