ios ios定时器销毁不准怎么精确

ios中定时器和线程的区别_百度知道
ios中定时器和线程的区别
一般来说一个应用程序就是一个进程,一个进程有多个线程,如果应用程序只有一个线程的话,那么就是主线程,主线程运行一些下载大文件的耗费资源的东西,主线程就会阻塞住,没有办法运行其他东西。定时器如果放在主线程中的话,如果主线程中还有一些耗费资源的东西,就会造成定时器不准确的现象。这两个东西是两个不同的东西,没有可比性。
其他类似问题
为您推荐:
线程的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁iOS使后台可以运行代码 比如定时器 - OPEN代码分享
//后台运行定时器
-(void)applicationDidEnterBackground:(UIApplication *)application{
UIApplication*
app = [UIApplication sharedApplication];
UIBackgroundTaskIdentifier bgT
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
dispatch_async(dispatch_get_main_queue(), ^{
if (bgTask != UIBackgroundTaskInvalid)
bgTask = UIBackgroundTaskI
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_async(dispatch_get_main_queue(), ^{
if (bgTask != UIBackgroundTaskInvalid)
bgTask = UIBackgroundTaskI
&&您还没有登录,点击这里或之后才能回复!
浏览数: 466
分享时间: 5 个月 前iOS定时器NSTimer使用详解
由于要使用到NSTimer 定时器用来做子线程 循环的执行任务。现在简单解释下NSTimer的使用方法。
1NSTimer *myTimer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(scrollTimer) userInfo:nil repeats:NO];
每1.5s调用一次scrollTimer 只循环一次
repeats:NO 为单循环 YES为重复循环
永久停止定时器
1[timer invalidate];
要想实现:先停止,然后再某种情况下再次开启运行timer,可以使用下面的方法:
首先关闭定时器不能使用上面的方法,应该使用下面的方法:
12//关闭定时器
[myTimer setFireDate:[NSDate distantFuture]];
然后就可以使用下面的方法再此开启这个timer了:
12//开启定时器
[myTimer setFireDate:[NSDate distantPast]];
例子:比如,在页面消失的时候关闭定时器,然后等页面再次打开的时候,又开启定时器。
(主要是为了防止它在后台运行,暂用CPU)可以使用下面的代码实现:
12345678910111213//页面将要进入前台,开启定时器
-(void)viewWillAppear:(BOOL)animated
//开启定时器
[scrollView.myTimer setFireDate:[NSDate distantPast]];
//页面消失,进入后台不显示该页面,关闭定时器
-(void)viewDidDisappear:(BOOL)animated
//关闭定时器
[scrollView.myTimer setFireDate:[NSDate distantFuture]];
如果timer是在子线程开启的
就需要对把timer加入到该线程的runloop中去。否则timer会失效。
1[[NSRunLoop currentRunLoop]addTimer:myTimer forMode:NSDefaultRunLoopMode];
友情链接:(http://www.wckey.net)&(http://www.sdtudi.net)&()&(http://www.)&()&(.cn)&()&()&()&()&

我要回帖

更多关于 ios 定时器 的文章

 

随机推荐