Objective c 一旦分派,NSTimer将失效

Objective c 一旦分派,NSTimer将失效,objective-c,ios7,grand-central-dispatch,nstimer,Objective C,Ios7,Grand Central Dispatch,Nstimer,这是我的示例代码。我有定时器,每秒钟触发一次函数“调用” } 这里我的疑问是,当我们将“静态调度\u once\t myDisPatch”更改为“dispatch\u once\t myDisPatch”时。然后计时器自动失效。它不会再次调用该函数。为什么我从dispatch\u\t中删除静态关键字时会发生这种情况?为什么它会停止计时器?提前谢谢 static dispatch_once_t myDisPatch; dispatch_once(&myDisPatch, ^{ NS

这是我的示例代码。我有定时器,每秒钟触发一次函数“调用”

}

这里我的疑问是,当我们将“静态调度\u once\t myDisPatch”更改为“dispatch\u once\t myDisPatch”时。然后计时器自动失效。它不会再次调用该函数。为什么我从dispatch\u\t中删除静态关键字时会发生这种情况?为什么它会停止计时器?提前谢谢

static dispatch_once_t myDisPatch;
dispatch_once(&myDisPatch, ^{
    NSLog(@"called inside");
});
这段代码通常用于单例,以确保只执行一次。当您删除
静态
时,它可以执行多次,这就是它工作的原因。您根本不应该将其用于重复计时器


因此,对于静态,您将每秒看到“调用的外部”,但“调用的内部”只有一次。这并不意味着计时器停止。

代码没有停止计时器。相反,当您删除static关键字时,它将阻塞等待陷阱中的主线程(它将永远留在这里)

在调试器中单击pause(暂停),当您希望启动计时器时,您将看到堆栈跟踪

如果不想使用静态分派令牌,请将其赋值为0(不确定为什么实际上需要一次分派_)


它并没有停止计时器。然后问题出在其他地方,这就是我发布这个答案的原因。请尝试此项目这是我的示例项目..在那里你可以看到问题。
static dispatch_once_t myDisPatch;
dispatch_once(&myDisPatch, ^{
    NSLog(@"called inside");
});
dispatch_once_t myDisPatch = 0;
dispatch_once(&myDisPatch, ^{
    NSLog(@"called inside");
});