时间:NSTimer,代码时运行时间段,
一:NSTimer
当时间间隔>1s是用NSTimer;
方法:
[NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(timeChange) userInfo:nil repeats:YES];
关于内存释放
如果我们启动了一个定时器,在某个界面释放前,将这个定时器停止,甚至置为nil,都不能是这个界面释放,原因是系统的循环池中还保有这个对象。所以我们需要这样做:
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
 | 
-(void)dealloc{    NSLog(@"dealloc:%@",[self class]);}- (void)viewDidLoad {    [super viewDidLoad];    timer= [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(myLog:) userInfo:nil repeats:YES];    UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];    btn.backgroundColor=[UIColor redColor];    [btn addTarget:self action:@selector(btn) forControlEvents:UIControlEventTouchUpInside];    [self.view addSubview:btn];}-(void)btn{    if (timer.isValid) {        [timer invalidate];    }    timer=nil;    [self dismissViewControllerAnimated:YES completion:nil];} | 
在官方文档中我们可以看到 [timer invalidate] timer=nil;是唯一的方法将定时器从循环池中移除。
雪花定时器
- (void)awakeFromNib
{
// 添加定时器 0.1 0.35
// [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(timeChange) userInfo:nil repeats:YES];
// 一般如果定时器调用频率非常高,<1s,通常不会使用NSTimer,NSTimer调用优先级不高,NSTimer在重绘的时候也不要使用
CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(setNeedsDisplay)];
[link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
}
//- (void)timeChange
//{
// // setNeedsDisplay 这个方法并不会马上调用 drawRect方法,仅仅是给当前视图做一个重绘标记,当下一次屏幕刷新的时候就会调用drawRect方法
// [self setNeedsDisplay];
//}
static int _snowY = 0;
- (void)drawRect:(CGRect)rect {
// Drawing code
UIImage *image = [UIImage imageNamed:@"雪花"];
[image drawAtPoint:CGPointMake(50, _snowY)];
_snowY += 10;
if (_snowY > rect.size.height) {
_snowY = 0;
}
}
二:时间段.--计算一段代码的效率
1s = 1000ms = 10^3ms(毫秒) = 10^6μs (微秒) = 10^9ns (纳秒) = 10^12ps (皮秒) = 10^15fs (飞秒)
//当前时间:
double date_s = CFAbsoluteTimeGetCurrent();for (int i = ; i <; i++) {
NSLog(@"I Love You!!!");
}
//时间差.
double date_current = CFAbsoluteTimeGetCurrent() - date_s;
NSLog(@" ForLoop Time: %f ms",date_current * );
时间:NSTimer,代码时运行时间段,的更多相关文章
- 撰写一篇博客要求讲述四则运算2的设计思想,源程序代码、运行结果截图、编程总结分析,并按照PSP0级的要求记录开发过程中的时间记录日志。
		
一.撰写一篇博客要求讲述四则运算2的设计思想,源程序代码.运行结果截图.编程总结分析,并按照PSP0级的要求记录开发过程中的时间记录日志. 1.设计思想: ①创建test.jsp建立第一个前端界面,提 ...
 - C#_技巧:计算代码块运行的时间
		
System.Diagnostics下类Stopwatch,给程序代码块运行计时, 利用start()和stop()方法来标记代码快. 该命名空间下还有一些其他类,可以对程序进行诊断(diagnosi ...
 - 如何在ASP.NET Core程序启动时运行异步任务(1)
		
原文:Running async tasks on app startup in ASP.NET Core (Part 1) 作者:Andrew Lock 译者:Lamond Lu 背景 当我们做项目 ...
 - PHP文件PHP代码及运行(适合PHP初学者)
		
本文转自:https://blog.csdn.net/cnds123/article/details/80700444 如果在warmpserver上运行php只显示源代码,可能是在用记事本保存后缀为 ...
 - 五、CLR加载程序集代码时,JIT编译器对性能的产生的影响
		
1.CLR首次加载代码造成的性能损失 四.CLR执行程序集中代码介绍了CLR在首次执行一个类的时,会初始化一个内部结构,然后当目标方法被首次调用时,JITComplier函数(JIT编译器)会验证IL ...
 - ASP.NET Core 3.x启动时运行异步任务(一)
		
这是一个大的题目,需要用几篇文章来说清楚.这是第一篇. 一.前言 在我们的项目中,有时候我们需要在应用程序启动前执行一些一次性的逻辑.比方说:验证配置的正确性.填充缓存.或者运行数据库清理/迁移等 ...
 - git 提代码时的相关命令,Mark一下
		
以前用命令提代码都是复制粘贴,现在换了工作后,特别是回退代码的命令又忘了,去网上查了好久,心累.特此Mark一下 1. 打patch: 1.1 git diff >> ljh.patch ...
 - C#实现每隔一段时间执行代码(多线程)
		
总结以下三种方法,实现c#每隔一段时间执行代码: 方法一:调用线程执行方法,在方法中实现死循环,每个循环Sleep设定时间: 方法二:使用System.Timers.Timer类: 方法三:使用Sys ...
 - ant 执行到javac时运行中止,怎么办?
		
今天下午我用ant,明明都能打出target.后来改了点代码就不行了,执行到compile的javac时运行中止,真是见鬼了. 在ant构建文件上右击,点击"run as"-> ...
 
随机推荐
- python的__name__和dir()属性
			
1.__name__属性 一个模块被另一个程序第一次引入时,其主程序将运行.如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行.示例 ...
 - Java对象的死亡
			
在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(即不可能再被任何途径使用的对象). 一,引用计数算法 给 ...
 - 框架-数据库定义MD5加密
			
1.--定义Md5加密declare @pt_pwd varchar(50)set @pt_pwd = ''set @pt_pwd = substring(sys.fn_sqlvarbasetostr ...
 - Apache Beam 传 大数据杂谈
			
1月10日,Apache软件基金会宣布,Apache Beam成功孵化,成为该基金会的一个新的顶级项目,基于Apache V2许可证开源. 2003年,谷歌发布了著名的大数据三篇论文,史称三驾马车:G ...
 - [转] Python 常用第三方模块 及PIL介绍
			
原文地址 除了内建的模块外,Python还有大量的第三方模块. 基本上,所有的第三方模块都会在PyPI - the Python Package Index上注册,只要找到对应的模块名字,即可用pip ...
 - docker 配置 direct-lvm
			
当前需要设置的宿主机是环境是搭建在vbox虚拟机上的centos7系统.测试环境中出现过一次意外情况,当时为了测试docker日志文件限制,运行了一个docker容器,但是后面忘记停止了,几天后发现了 ...
 - 【postMan】发送post请求,返回错误码415
			
解决方法: 参看:https://www.cnblogs.com/spec-dog/p/3731279.html 将Request的Content-Type:application/json;char ...
 - time is always a factor, time is always now!!!!
			
https://www.linkedin.com/pulse/time-always-now-joe-alderman ---------------------------------------- ...
 - MAC上Nuclide的安装
			
MAC上Nuclide的安装 本文版权归作者全部,如需转载请联系孟祥月 CSDN博客:http://blog.csdn.net/mengxiangyue 独立博客:http://mengxiangyu ...
 - ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml)  用javascript在客户端删除某一个cookie键值对  input点击链接另一个页面,各种操作。  C# 往线程里传参数的方法总结  TCP/IP 协议  用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图  (转)值得学习百度开源70+项目
			
ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 我们都知道在使用WebApi的时候Controller会自动将Action的返回值自动进行各种序列化处理(序列化为 ...