NS_CLASS_AVAILABLE_IOS(2_0) @interface UIApplication : UIResponder
/*! The system guarantees that it will not wake up your application for a background fetch more
frequently than the interval provided. Set to UIApplicationBackgroundFetchIntervalMinimum to be
woken as frequently as the system desires, or to UIApplicationBackgroundFetchIntervalNever (the
default) to never be woken for a background fetch.
This setter will have no effect unless your application has the "fetch"
UIBackgroundMode. See the UIApplicationDelegate method
`application:performFetchWithCompletionHandler:` for more. */
- (void)setMinimumBackgroundFetchInterval:(NSTimeInterval)minimumBackgroundFetchInterval NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED;
@end
建議使用 GCD 的定時器。 GCD 的定時器和 NSTimer 是不一樣的,NSTimer 受 RunLoop 影響,但 GCD 的定時器不受影響,因為 RunLoop 也是基於 GCD 的。
使用
NSTimer
单例,然后加入到主线程runloop
中即可代理加GCDj加單例
怎麼用看你啦,具體情況具體分析.
個人最佳實踐是
Runloop
,新建一个类,类初始化实例之后新建一个线程,监听这个线程的Runloop
消息,添加信号源,然后在回调的方法里实现你的需求. 这样可以避免一些NSTimer
誤差或其他的問題.第二個是監聽
CADisplayLink
,当然,监听CADisplayLink
也是有隱患的,可能會因為任務量繁重造成"掉幀".對了,在後台是不好實現的,除非註冊
音频服务
. 還有你可以研究研究這個方法: