iOS NSDate日期时间及NSTimer定时任务
2016-03-15 14:34
676 查看
NSDate
NSDate *date = [NSDate date]; // 获取系统当前时间 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"Today HH:mm"; NSString *time = [formatter stringFromDate:date]; [NSDate dateWithTimeIntervalSinceNow:5.0]; // 5.0秒后的时间
NSDate+MJ.h
NSDate *preDate; [preDate deltaWithNow]; // preDate距离今天的时间元素
NSDateFormatter
NSDateFormatter *fmt = [[NSDateFormatter alloc] init]; // 真机调试时,需要加上此local; fmt.local = [[NSLocal alloc] initWithLocalIndentifier:@“en_US”]; fmt.dateFormat = @"EEE MMM dd HH:mm:ss Z yyyy"; // 根据一个指定的时间格式化器 获取具体时间; NSDate *createDate = [fmt dateFromString:str];
转换成其它格式
fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss"; NSString *newDate = [fmt stringFromDate:createDate]; // 添加一段时间长度到当前的date; [date dateByAddingTimeInterval:timeLength];
NSCalendar
// 日历对象 NSCalendar *calendar = [NSCalendar currentCalendar]; // 获得日期的所有元素 NSDateComponents *cmps = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth fromDate:date]; // cmps.year, cmps.month;
NSTimer
通常用于定时更新非界面的操作1.启动定时器
两种方法:
<1>.调用timerWith…创建的timer,把这个对象手动添加到消息循环中才能启动;
NSRunLoop *loop = [NSRunLoop currentRunLoop]; [loop addTimer:timer forMode:NSRunLoopCommonModes]; [timer fire]; // 调用一次执行一次
<2>.调用scheduleTimer…创建的timer,自动启动(创建完成后自动启动);
2.停止计时器
[timer invalidate]; timer = nil;
一旦停止了计时器,那这个计时器就不能再重用了,下次必须重新创建一个新的计时器对象;因为当调用完invalidate方法后,这个计时器就已经废了无法重用了,所以需要将timer设置为nil;
线程优先级
默认情况下,UIView的优先级要高于timer,所以如果在timer里面执行改变UIView的方法,需要给timer设置优先级;NSRunLoop *loop = [NSRunLoop currentRunLoop]; [loop addTimer:timer forMode:NSRunLoopCommonModes]; // 或者
CADisplayLink
严格意义上讲 CADisplayLink 并不是计时器控件, 它是与显示器刷新频率一致的。比如显示的刷新频率是60赫兹, 那么 CADisplayLink 就会每秒钟执行60次。正是因为这个原因所以有时也把 CADisplayLink 当做计时器控件来使用。CADisplayLink *display = [CADisplayLink displayLinkWithTarget:self selector:@(update)]; // 将CADisplayLink加入到消息循环中; [display addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; [display invalidate]; display = nil;
与NSTimer的区别
NSTimer(时间间隔比较大,1秒,几秒)
CADisplayLink(时间间隔比较小,不到1秒)
dispatch_after
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ NSLog(@"Log a msg after 2s"); });
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用中UISearchDisplayController搜索效果的用法
- IOS开发环境windows化攻略
- iOS应用中UITableView左滑自定义选项及批量删除的实现
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- iOS推送的那些事
- IOS 改变键盘颜色代码