【问题标题】:Objective-C NSTimer after autostart application自动启动应用程序后的Objective-C NSTimer
【发布时间】:2013-12-04 20:57:47
【问题描述】:

我在我的 iOS 应用程序中添加了自动启动(在必需的后台模式下添加 VoIP),它运行良好。然后我想添加 NSTimer。我在 - (id) init 中写了以下内容

NSLog(@"!!!!IT'S START!!!!");

    MyTimer = [NSTimer scheduledTimerWithTimeInterval:60 target:self
                                                     selector:@selector(StartMyTimer) userInfo:nil repeats:YES];


- (BOOL) StartMyTimer
{
NSLog(@"Timer is wirk");
}

当我的应用程序自动启动时,我会收到一条消息“!!!!IT'S START!!!!”没有人……

如果有人知道问题出在哪里,请帮忙!

【问题讨论】:

  • 不是只有当应用程序在前台时才会执行计时器吗?
  • 应用启动时必须执行定时器

标签: ios iphone objective-c nstimer autostart


【解决方案1】:

首先,也许您想在这些日志消息中检查您的英语。

其次,按照惯例,您应该为选择器和变量使用小写(camelCase)名称(“myTimer”而不是“MyTimer”)。

第三,BOOL 返回类型实际上没有意义。方法名称startMyTimer 也没有。也许像timerFired 这样的东西或者可能更合适。

最后,您必须确保您的应用程序仍在运行,否则计时器将无法调用该方法。此外,您必须确保计时器没有被释放,因此请确保包含它的类在内存中。您也许还应该对计时器保持强烈的参考。

【讨论】:

  • > 另外,你必须确保定时器没有被释放,所以要确保包含它的类在内存中我该怎么做?....你的意思是“强引用” “?谢谢!
  • 例如,您的应用程序委托可以将NSTimer 对象保留为变量。然后你可以确定它总是在内存中(直到你明确地销毁它)。
  • 即使您不保留引用,调度的计时器也不会被释放。这同样适用于他们的目标对象。
  • 仍然 - 如果需要,保留计时器引用以使其无效是有用的。我无法使其与已释放的实例一起使用。
【解决方案2】:

也许您必须添加参数来接收计时器并在 StartMyTimer 的末尾添加 :。

MyTimer = [NSTimer scheduledTimerWithTimeInterval:60 target:self
                                                 selector:@selector(StartMyTimer:) userInfo:nil     repeats:YES];


- (BOOL) StartMyTimer:(NSTimer *)myTimer {
    NSLog(@"Timer is wirk");
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 2012-02-15
    • 1970-01-01
    相关资源
    最近更新 更多