IOS object-c 中定时器NSTimer的开启与关闭

调用一次计时器方法:

 代码如下 复制代码

myTimer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(scrollTimer) userInfo:nil repeats:NO]; 
//不重复,只调用一次。timer运行一次就会自动停止运行 

重复调用计时器方法:

 代码如下 复制代码

timer =  [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(function:) userInfo:nil repeats:YES]; 
//每1秒运行一次function方法。 

注意:将计数器的repeats设置为YES的时候,self的引用计数会加1。因此可能会导致self(即viewController)不能release,所以,必须在viewWillAppear的时候,将计数器timer停止,否则可能会导致内存泄露。

停止timer的运行,但这个是永久的停止:(注意:停止后,一定要将timer赋空,否则还是没有释放。不信?你自己试试~)

 代码如下 复制代码
//取消定时器 
[timer invalidate]; 
timer = nil; 

要想实现:先停止,然后再某种情况下再次开启运行timer,可以使用下面的方法:

首先关闭定时器不能使用上面的方法,应该使用下面的方法:

 代码如下 复制代码

//关闭定时器 
[myTimer setFireDate:[NSDate distantFuture]]; 
然后就可以使用下面的方法再此开启这个timer了:

//开启定时器 
[myTimer setFireDate:[NSDate distantPast]]; 
例子:比如,在页面消失的时候关闭定时器,然后等页面再次打开的时候,又开启定时器。

(主要是为了防止它在后台运行,暂用CPU)可以使用下面的代码实现:

//页面将要进入前台,开启定时器 
-(void)viewWillAppear:(BOOL)animated 

   //开启定时器 
   [scrollView.myTimer setFireDate:[NSDate distantPast]]; 

 
//页面消失,进入后台不显示该页面,关闭定时器 
-(void)viewDidDisappear:(BOOL)animated 

   //关闭定时器 
   [scrollView.myTimer setFireDate:[NSDate distantFuture]]; 

OK,搞定。

补充:

由于要使用到NSTimer 定时器用来做子线程 循环的执行任务。现在简单解释下NSTimer的使用方法。

 

 代码如下 复制代码
NSTimer *myTimer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(scrollTimer) userInfo:nil repeats:NO];

每1.5s调用一次scrollTimer 只循环一次

repeats:NO 为单循环 YES为重复循环

永久停止定时器

 代码如下 复制代码
[timer invalidate];

要想实现:先停止,然后再某种情况下再次开启运行timer,可以使用下面的方法:

首先关闭定时器不能使用上面的方法,应该使用下面的方法:

 代码如下 复制代码

//关闭定时器
[myTimer setFireDate:[NSDate distantFuture]];
然后就可以使用下面的方法再此开启这个timer了:

//开启定时器
[myTimer setFireDate:[NSDate distantPast]];
例子:比如,在页面消失的时候关闭定时器,然后等页面再次打开的时候,又开启定时器。
(主要是为了防止它在后台运行,暂用CPU)可以使用下面的代码实现:

//页面将要进入前台,开启定时器
-(void)viewWillAppear:(BOOL)animated
{
//开启定时器
[scrollView.myTimer setFireDate:[NSDate distantPast]];
}

//页面消失,进入后台不显示该页面,关闭定时器
-(void)viewDidDisappear:(BOOL)animated
{
//关闭定时器
[scrollView.myTimer setFireDate:[NSDate distantFuture]];
}

如果timer是在子线程开启的
就需要对把timer加入到该线程的runloop中去。否则timer会失效。

 代码如下 复制代码

[[NSRunLoop currentRunLoop]addTimer:myTimer forMode:NSDefaultRunLoopMode];

时间: 2024-10-26 01:50:13

IOS object-c 中定时器NSTimer的开启与关闭的相关文章

iOS中定时器NSTimer的使用

1.初始化 + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo; + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelec

ios屏幕亮度调整后,锁屏开启恢复原状问题。

问题描述 ios屏幕亮度调整后,锁屏开启恢复原状问题. 在程序中,我用一下代码调整亮度 [[UIScreen mainScreen] setBrightness:0.2]; 但是锁屏后再进入应用,屏幕亮度就会恢复到代码调整前的亮度. 这里应该是由于iOS屏幕亮度自适应导致的. 在android中好像有一个resume的方法可以恢复到之前调整的状态,不知道iOS里面有没有类似的方法.

iOS 各版本中的新特性(What's New in iOS)- 目录翻译完成

iOS 各版本中的新特性(What's New in iOS) 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 介绍 Introduction文档组织结构 Organization of Thi

定时器NSTimer

如果我们想让某个方法重复的执行,可以用ios提供的定时器NSTimer来完成,其实使用起来非常简单,分为三个步骤: 一.调用NSTimer scheduledTimerWithTimeInterval::target:: selector::userInfo::repeats或者scheduledTimerWithTimeInterval:invocation:repeats类方法来创建NSTimer对象. 其中的参数: timeInterval:指定每隔多少秒执行一次任务 invocation

在iOS应用程序中使用Frida绕过越狱检测

 您当前的位置: 安全博客 >  技术研究 >  在iOS应用程序中使用Frida绕过越狱检测          阿里聚安全在之前的三篇博客中介绍了利用Frida攻击Android应用程序,整个过程仿佛让开发者开启上帝视角,在本篇博客中,我们将会介绍在iOS应用程序中使用Frida绕过越狱检测.即使你从来没有使用过Frida,这篇文章也将会作为进入移动安全开发和分析的入门指南. 相关文章内容: 利用FRIDA攻击Android应用程序(一) 利用FRIDA攻击Android应用程序(二) 利用

ios-安卓和IOS有没有中文文档呢,我英文不好?

问题描述 安卓和IOS有没有中文文档呢,我英文不好? 安卓和IOS有没有中文文档?我英文不太好,看不懂英文的,有没有全中文的,不经简单翻译的 解决方案 下个有道词典,直接屏幕取词,没人能每个单词都会,主要要耐心看 解决方案二: 哈皮还是看英文的吧,看看就明白了 解决方案三: 看的多了就明白了,英语差不多的话,就能发现不会的就那么几个关键的词 解决方案四: 这个必须自己适应吧,毕竟各大技术网站还是英文的居多,API也是英文的,一点点积累吧 解决方案五: 一开始都会有这样的烦恼,那么多英文想想都头疼

连接-空间中的网站怎么开启GZIP压缩

问题描述 空间中的网站怎么开启GZIP压缩 我的网站放在空间中,只能用FTP连接,我该怎么修改GZIP压缩呢? 解决方案 直接问提供你空间的运营商.你缴的费用中就包括了售后服务,不问白不问.

电脑中如何设置会声会影开启重新链接检查提示窗口

  电脑中如何设置会声会影开启重新链接检查提示窗口.电脑中使用软件有时候会出现一些问题.有用户在电脑系统中使用会声会影制作视频时,移动图片或视频操作会提示找不到文件,这时就需要重新链接,如果之前将提示窗口关闭并不再提示,要怎么在会声会影中开启重新链接检查提示窗口呢? 1.点击菜单栏中的设置--参数选择; 2.勾选"重新链接检查",点击确定; 3.这样在文件素材不在原位置时,就会弹出重新链接的提示窗口; 4.如果没有立即弹出,也可以单击丢失素材的位置,同样会提示重新链接. 电脑中设置会声

java中使用Object类中比较遇到的问题,请帮忙解答一下。

问题描述 在java中由于Object是所有类的父类,而且equals方法是public,理论上所有Person类都能够继承并使用该方法.然而以下程序执行结果是false.```classPerson//定义了Person类,实际就是继承了Object类{privateStringname;privateintage;publicPerson(Stringname,intage){this.name=name;this.age=age;}}publicclassTestObject{public