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,此时运行循环应被禁用。因此,如果应用程序进入后台,请使计时器无效,并在应用程序再次进入前台时重新创建计时器谢谢,您的天才建议解决了我的问题。