当我打电话scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
主线程和设置时间间隔,以下面计时器5秒代码上被执行,并在5秒后定时器选择器被调用。
但是,如果我尝试在一些后台线程相同,下面的代码scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
将不会被执行,它会等待计时器火灾,然后得到执行。 当然,为了在后台运行的线程定时器,我第一次拿到的实例NSRunLoop
并运行它。
有没有一种方法来设置后台线程定时器,使其不堵塞,所以代码它就会立即执行后?
的NSTimer需要一个活动的运行循环,在初始化主线程时,它会自动使用主运行循环。 如果你需要,你需要将其附加到线程的运行循环背景计时器并调用运行()来激活它。
需要的NSTimer一个活的NSRunLoop来执行它的事件。 在主线程中,NSRunLoop总是生活,永远不会停止,直到应用程序被终止,但在其他线程,你必须调用运行(),以主动的NSRunLoop。
的NSTimer必须调用无效()以释放当前定时器,否则,计时器将保留目标的当前实例的很强的参考,并且它会留在存储器中,直到无效()调用或应用程序终止;
必须的NSTimer创建并在同一个线程无效,并且很多时候,我们可能会忘记这一点。
看看下面这个例子,它可能有助于>> http://www.acttos.org/2016/08/NSTimer-and-GCD-Timer-in-iOS/和文档: https://developer.apple .COM /文档/基础/的NSTimer