Meg*_*anX 35 nstimer nsthread ios5
当我调用scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:主线程并将时间间隔设置为5秒时,下面的代码被执行,并且在5秒后调用定时器选择器.
但是如果我在某个后台线程中尝试相同,下面的代码scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:将不会被执行,它将等待定时器触发然后执行.当然,为了在后台线程中运行计时器,我首先得到了一个实例NSRunLoop并运行它.
有没有办法在后台线程中设置定时器并使其无阻塞,所以代码在它立即执行后?
NSTimer需要一个活动的运行循环,当在主线程中初始化时,它会自动使用主运行循环。如果您需要制作后台计时器,您需要将其附加到线程的运行循环并调用 run() 以使其处于活动状态。
NSTimer需要一个实时的NSRunLoop来执行它的事件。在主线程中,NSRunLoop始终处于活动状态,并且在应用程序终止之前永远不会停止,但在其他线程中,您必须调用run()来激活NSRunLoop。
NSTimer必须调用invalidate()来释放当前定时器,否则定时器会保留当前目标实例的强引用,并且会一直保留在内存中,直到调用 invalidate() 或应用程序终止;
NSTimer必须在同一个线程中创建和失效,很多时候,我们可能会忘记这一点。
看看这个例子,它可能会有所帮助>> http://www.acttos.org/2016/08/NSTimer-and-GCD-Timer-in-iOS/ 和文档:https : //developer.apple .com/documentation/foundation/nstimer
| 归档时间: |
|
| 查看次数: |
16297 次 |
| 最近记录: |