Ios Ntimer似乎被MKMapView平移减慢了?
在Ios Ntimer似乎被MKMapView平移减慢了?,ios,objective-c,swift,timer,Ios,Objective C,Swift,Timer,在UIViewController中,我使用scheduledTimer方法,安排了一个NSTimer每1秒启动一次,因此我可以每秒更新视图中的UILabel。但问题是,每当我在MKMapView中来回移动ui视图中的MKMapView时,NSTimer触发似乎会延迟。因此,延迟导致UILabel无法统一更新,这是不好的。MKMapView平移会占用太多资源吗?如何安排NSTimer,以便在平移MKMapView时不会出现延迟?(但是,请注意,我没有在某种后台线程上调度NSTimer,它在主线程
UIViewController
中,我使用scheduledTimer
方法,安排了一个NSTimer
每1秒启动一次,因此我可以每秒更新视图中的UILabel
。但问题是,每当我在MKMapView
中来回移动ui视图中的MKMapView
时,NSTimer
触发似乎会延迟。因此,延迟导致UILabel
无法统一更新,这是不好的。MKMapView
平移会占用太多资源吗?如何安排NSTimer
,以便在平移MKMapView
时不会出现延迟?(但是,请注意,我没有在某种后台线程上调度NSTimer
,它在主线程中。)谢谢。如果使用scheduledTimerWithTimeInterval(…)
创建计时器,它将以NSDefaultRunLoopMode
模式添加到当前运行循环中。当应用程序忙于事件跟踪时(即,如果在UIScrollView中滚动或与UI进行任何其他交互),计时器将不会启动
如果使用nsrunlopCommonModes
作为模式,则在与用户界面交互时计时器将启动,您可以创建一个非计划的NSTimer并将其添加到运行循环中
let timer = NSTimer(timeInterval: 1.0, target: self, selector: Selector("timerFired:"), userInfo: nil, repeats: true)
NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)
为了进一步了解,这个问题包含了一个关于不同运行循环模式的很好的解释 在后台线程中设置计时器进行计算,然后使用dispatch\u async
code获取主线程以更新UI,这样做有效吗?调度异步示例如本asnwer所示:如何安排计时器?如果希望在滚动/平移时触发,则需要使用NSRunLoopCommonModes
对其进行计划。谢谢,但有一个问题……应用程序注册后台位置更新,并且我用于获取位置更新的CLLocationManager已启用延迟更新。我尝试使用nsrunlopCommonModes将计时器添加到运行循环中,但当应用程序运行过长时,系统似乎会停止运行。我认为这是因为NSTimer正在占用nsrunlop,此时运行循环应被禁用。因此,如果应用程序进入后台,请使计时器无效,并在应用程序再次进入前台时重新创建计时器谢谢,您的天才建议解决了我的问题。