- 浏览: 904327 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (466)
- iPhone, iOS , Objective-c (155)
- 数据库 (20)
- 设计模式 (5)
- 第三方包管理,cocoapod (2)
- 版本管理, SVN, Subversion, Git (1)
- Google, Android, Java (14)
- Wordpress (1)
- 职业素养 (3)
- 版本管理,git (3)
- 前端小技巧 (2)
- flash (1)
- javascript (5)
- Ruby (0)
- 编程语言 (1)
- 网络常识 (1)
- 找到生活好感觉 (5)
- 产品经理 (1)
- markdown (1)
- 云服务器 (1)
- iPhone (116)
- iOS (116)
- Objective-c (116)
- 学习技巧 (2)
- Google (5)
- Android (6)
- Java (21)
- python (1)
- sqlite (3)
- node.js (2)
- mongodb (2)
- 学习技巧,阅读 (2)
- 软件测试 (3)
- 架构设计 (2)
- 设计 (1)
- Spring framework (3)
- junit (1)
- Linux (2)
- 软件 (1)
- Struts2 (1)
- 版本管理 (3)
- SVN (3)
- Subversion (3)
- Git (3)
- mysql (5)
- quartz (1)
- 无关技术 (1)
- 前端 (1)
- Redis (1)
- 产品管理 (0)
- 计算机常识 (1)
- 计算机科学 (0)
- swift (1)
- 服务器 (2)
- 搜索 (1)
- Scala (1)
- J2EE (1)
- maven (1)
- 前端css (1)
- 英语 (1)
- 消息队列 (1)
- kafka (0)
- apache kafka (4)
- netbeans (1)
- IDE (2)
- 歌词 (1)
- 过滤器实现 (1)
- linux vim vi (1)
- jmeter (1)
- springcloud (1)
最新评论
-
hujingnemo:
不知道为什么打不开
CHM如何改编字体大小 -
weiboyuan:
求答案 weiboyuanios@163.com
iOS软件工程师面试题(高级) -
xueji5368:
这个现在已经广泛使用了嘛!
RoboGuice入门 -
Yao__Shun__Yu:
...
CHM如何改编字体大小 -
353144886:
非常之详细 美女求认识
sqlite数据类型 datetime处理
问题
应用需要调度代码以在特定的时间执行。此外,你还想要重复执行任务。
解决方案
使用NSTimer调度代码以在特定的时间执行。为了使用NSTimer,你需要有日期对象与指向应用的运行循环的引用。
注意:
NSTimer需要有运行循环,如果想在Mac或iOS应用中使用定时器,就必须有运行循环。本攻略需要应用带有运行循环。1.11与1.12节分别介绍了创建Mac与iOS应用的步骤。
说明
本攻略的代码位于应用委托中。通常情况下,定时器会放在自定义类或是应用控制器中。
定时器会从特定的日期与时间开始向对象发送消息。如果应用需要重复,那么定时器可能会间隔一段时间后再发送消息。你首先需要有日期对象,用来表示定时器开始向对象发送消息的日期与时间:
NSDate *scheduledTime = [NSDate dateWithTimeIntervalSinceNow:10.0];
上述调度时间位于上面这一行代码执行后的10秒钟。可以在这里使用任何日期。
接下来,通过initWithFireDate:interval:target:selector:userInfo:repeats:构造函数创建定时器:
SString *customUserObject = @"To demo userInfo";
NSTimer *timer = [[NSTimer alloc] initWithFireDate:scheduledTime
interval:2
target:self
selector:@selector(task)
userInfo:customUserObject
repeats:YES];
这里有些内容需要说明一下。第1个参数是日期对象,指定了定时器何时变成活动状态。接下来是间隔时间,是定时器再次发送消息前所需等待的秒数。之后是目标参数描述符,目标是方法所处的对象。selector参数是位于圆括号中的方法名,前面是@selector关键字。由于方法与定时器一样都位于应用委托中,因此可以使用self关键字。
userInfo是定时器使用的自定义内容。可以使用任何对象,并且可以获得正在执行的消息中的对象引用(上面的selector参数)。这里使用了字符串,但通常会使用字典或其他集合以支持更加复杂的活动。
repeats参数表示定时器是发送一次消息,还是根据第2个参数指定的时间间隔重复发送。
接下来需要指向运行循环的引用。可以通过NSRunLoop的currentRunLoop函数获得该引用:
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
现在,只需要将定时器添加到运行循环中即可:
[runLoop addTimer:timer forMode:NSDefaultRunLoopMode];
10秒钟后,定时器将会开始每隔两秒钟向应用发送task消息。
启动之后,如果想停止定时器,可以向定时器发送invalidate消息。这会从运行循环中删除定时器,代码如下所示:
[timer invalidate];
参见程序清单5-7。
代码
程序清单5-7 main.m
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize window = _window;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{
NSDate *scheduledTime = [NSDate dateWithTimeIntervalSinceNow:10.0];
NSString *customUserObject = @"To demo userInfo";
NSTimer *timer = [[NSTimer alloc] initWithFireDate:scheduledTime
interval:2
target:self
selector:@selector(task)
userInfo:customUserObject
repeats:YES];
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop addTimer:timer forMode:NSDefaultRunLoopMode];
}
-(void)task:(id)sender{
NSTimer *localTimer = (NSTimer *)sender;
NSLog(@"Schedule task has executed with this user info: %@", [localTimer userInfo]);
}
@end
使用
要想使用上述代码,请从Xcode构建并运行Mac应用。注意控制台窗口以及消息何时开始打印到日志中。此处打印出了时间戳,这样就可以看到时间间隔的运作方式了:
2012-01-19 15:23:28.651 Timer[31067:707] Schedule task has executed with this user info: To demo userInfo
2012-01-19 15:23:30.651 Timer[31067:707] Schedule task has executed with this user info: To demo userInfo
2012-01-19 15:23:32.651 Timer[31067:707] Schedule task has executed with this user info: To demo userInfo
应用需要调度代码以在特定的时间执行。此外,你还想要重复执行任务。
解决方案
使用NSTimer调度代码以在特定的时间执行。为了使用NSTimer,你需要有日期对象与指向应用的运行循环的引用。
注意:
NSTimer需要有运行循环,如果想在Mac或iOS应用中使用定时器,就必须有运行循环。本攻略需要应用带有运行循环。1.11与1.12节分别介绍了创建Mac与iOS应用的步骤。
说明
本攻略的代码位于应用委托中。通常情况下,定时器会放在自定义类或是应用控制器中。
定时器会从特定的日期与时间开始向对象发送消息。如果应用需要重复,那么定时器可能会间隔一段时间后再发送消息。你首先需要有日期对象,用来表示定时器开始向对象发送消息的日期与时间:
NSDate *scheduledTime = [NSDate dateWithTimeIntervalSinceNow:10.0];
上述调度时间位于上面这一行代码执行后的10秒钟。可以在这里使用任何日期。
接下来,通过initWithFireDate:interval:target:selector:userInfo:repeats:构造函数创建定时器:
SString *customUserObject = @"To demo userInfo";
NSTimer *timer = [[NSTimer alloc] initWithFireDate:scheduledTime
interval:2
target:self
selector:@selector(task)
userInfo:customUserObject
repeats:YES];
这里有些内容需要说明一下。第1个参数是日期对象,指定了定时器何时变成活动状态。接下来是间隔时间,是定时器再次发送消息前所需等待的秒数。之后是目标参数描述符,目标是方法所处的对象。selector参数是位于圆括号中的方法名,前面是@selector关键字。由于方法与定时器一样都位于应用委托中,因此可以使用self关键字。
userInfo是定时器使用的自定义内容。可以使用任何对象,并且可以获得正在执行的消息中的对象引用(上面的selector参数)。这里使用了字符串,但通常会使用字典或其他集合以支持更加复杂的活动。
repeats参数表示定时器是发送一次消息,还是根据第2个参数指定的时间间隔重复发送。
接下来需要指向运行循环的引用。可以通过NSRunLoop的currentRunLoop函数获得该引用:
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
现在,只需要将定时器添加到运行循环中即可:
[runLoop addTimer:timer forMode:NSDefaultRunLoopMode];
10秒钟后,定时器将会开始每隔两秒钟向应用发送task消息。
启动之后,如果想停止定时器,可以向定时器发送invalidate消息。这会从运行循环中删除定时器,代码如下所示:
[timer invalidate];
参见程序清单5-7。
代码
程序清单5-7 main.m
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize window = _window;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{
NSDate *scheduledTime = [NSDate dateWithTimeIntervalSinceNow:10.0];
NSString *customUserObject = @"To demo userInfo";
NSTimer *timer = [[NSTimer alloc] initWithFireDate:scheduledTime
interval:2
target:self
selector:@selector(task)
userInfo:customUserObject
repeats:YES];
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop addTimer:timer forMode:NSDefaultRunLoopMode];
}
-(void)task:(id)sender{
NSTimer *localTimer = (NSTimer *)sender;
NSLog(@"Schedule task has executed with this user info: %@", [localTimer userInfo]);
}
@end
使用
要想使用上述代码,请从Xcode构建并运行Mac应用。注意控制台窗口以及消息何时开始打印到日志中。此处打印出了时间戳,这样就可以看到时间间隔的运作方式了:
2012-01-19 15:23:28.651 Timer[31067:707] Schedule task has executed with this user info: To demo userInfo
2012-01-19 15:23:30.651 Timer[31067:707] Schedule task has executed with this user info: To demo userInfo
2012-01-19 15:23:32.651 Timer[31067:707] Schedule task has executed with this user info: To demo userInfo
发表评论
-
oc为啥不用try catch
2016-03-23 11:56 1404简单的来说,Apple虽然同时提供了错误处理(NSError) ... -
ReactiveCocoa笔记
2016-03-14 12:31 0为什么使用MVVM?为什么使用ReactiveCocoa? 概 ... -
PINCache
2016-01-19 15:11 948PINCache是线程安全的键值缓存框架,用来储存难以获取或重 ... -
Swift设计模式
2015-12-29 12:04 0Swift设计模式 -
Understanding Swift access control
2015-12-29 12:03 0Swift takes an unusual approuac ... -
cocoapods因GEM_HOME升级遇到问题解决办法
2015-12-17 14:40 926Installing CocoaPods on OS X 10 ... -
swift 闭包的比较写法
2015-12-16 11:10 755let names = ["Chris", ... -
iOS 生成二维码,生成条形码图片
2015-12-03 15:44 1472#pragma mark - 生成条形码以及二维码 // ... -
解决cocoapods 更新慢的问题
2015-11-23 17:01 756最近使用CocoaPods来添加第三方类库,无论是执行pod ... -
iOS中级面试题
2015-11-20 15:12 1182OneV‘s Den在博客里出了10道iOS面试题,用他的话是 ... -
cocoapods出错解决方法
2015-11-09 13:09 746自定义GEM_HOME $ mkdir -p $HOME/So ... -
oc时间从美国时间改到中国时间
2015-10-19 14:12 979_formatter = [[NSDateFormatt ... -
27个iOS开发库
2015-07-24 16:10 769超长慎入列表: DZNEmptyDataSet(UI,空表格 ... -
Values of type 'NSInteger' should not be used as format arguments; add an explic
2015-07-24 10:10 844Values of type 'NSInteger' shou ... -
iOS架构心得体会
2015-05-18 18:35 815好的架构不是设计出来的,而是进行出来的。 我的iOS工程架构 ... -
UICollectionView NSInternalInconsistencyException出现的原因
2015-05-11 11:32 3414'NSInternalInconsistencyExcepti ... -
XLForm-iOS表单库
2015-05-08 14:44 909XLForm是最灵活和强大的iOS类库,用于创建动态table ... -
Info.plist Utility Error: “Info.plist couldn't be opened because there is no suc
2015-05-06 16:13 689http://stackoverflow.com/questi ... -
iOS中Autolayout中各种情况的使用的width,height策略
2015-04-30 15:33 685可以总结为: 如果项目不支持横屏显示,使用w:Compac ... -
一句话加上下拉刷新
2015-04-29 18:22 770怎么一句话添加上拉刷新? https://github.co ...
相关推荐
`NSTimer`是苹果iOS和macOS开发中的一个核心组件,用于执行周期性的任务或者在特定时间点触发某个动作。这个“简单的时间选择器Nstimer”是一个实用工具,它提供了一个用户界面来控制`NSTimer`,允许用户进行暂停、...
在iOS开发中,`NSTimer`是一个非常重要的类,它允许开发者在指定的时间间隔后执行某段代码,或者定期重复执行某任务。本教程将基于"ios 时间定时器 NSTimer应用demo",深入探讨`NSTimer`的使用方法、工作原理以及...
此外,如果NSTimer是以重复模式(repeat mode)运行的话,它可能会在队列较为空闲时连续触发,造成任务执行频率高于预期。 CADisplayLink使用起来也很简单,可以实例化一个CADisplayLink对象,并设置它的target和...
`NSTimer`可以让你的应用程序按照预设的时间间隔执行任务,比如更新UI、发送网络请求或者执行动画效果。下面将详细探讨`NSTimer`的工作原理、创建方法、常见用法以及注意事项。 ### NSTimer的工作原理 `NSTimer`并...
在iOS开发中,`NSTimer` 是一个非常重要的类,用于在特定的时间间隔后执行某个操作,例如倒计时或定期更新UI。本教程将深入探讨`NSTimer`的使用,包括如何创建、启动、暂停以及取消定时器,并通过一个倒计时10秒的...
在iOS开发中,`NSTimer`是一个常用的工具,用于在特定的时间间隔执行某项操作。本文将深入探讨`NSTimer`的使用,特别是在创建小计时器时的两种类方法,以及它们如何受到屏幕滚动事件的影响及解决方案。 一、NSTimer...
`NSTimer`是Foundation框架中的一个类,主要用于执行周期性的或一次性的任务。它可以用于各种场景,如更新UI、定时检查网络状态等。`NSTimer`通过调度到一个运行循环(`NSRunLoop`)来实现定时功能。 #### 三、创建...
总之,`NSTimer`是iOS和macOS开发中常用的一个工具,用于在特定时间间隔执行任务。通过理解如何创建、控制和管理`NSTimer`,开发者可以构建各种需要定时功能的应用场景,如倒计时、定时提醒等。在实际项目中,根据...
在iOS应用开发中,NSTimer是一个非常重要的组件,它允许开发者在特定的时间间隔执行特定的任务。这个"IOS应用源码——nstimer.zip"文件显然包含了关于如何在iOS应用中使用NSTimer的源代码示例。NSTimer是Foundation...
3. **重复性**:`repeats`参数决定定时器是否重复执行。如果设置为`true`,那么定时器将持续触发;如果设置为`false`,则只触发一次。 4. **回调**:闭包是定时器触发时执行的代码。在这个场景中,我们可能需要更新...
创建一个NSTimer需要一个selector(执行的方法),一个timeInterval(间隔时间),一个target(接收消息的对象)和一个 repeats(是否重复)参数: ```swift let timer = Timer.scheduledTimer(timeInterval: 0.1, ...
`NSTimer`是基于RunLoop的,它可以被添加到RunLoop中以便在特定的时间间隔重复执行任务。`DemoNSTimer`这个项目显然是一个示例,展示了如何创建、启动和停止`NSTimer`,以及它在实际应用中的用法。 1. **NSTimer的...
- **repeats**: 指定定时器是否重复执行。 例如,创建一个每秒执行一次的定时器,我们可以这样做: ```swift let timer = NSTimer(timeInterval: 1.0, target: self, selector: #selector(countDownTime), userInfo...
`repeats`指示是否重复执行;`queue`指定执行block的队列,如果为空,则默认在主线程上执行;`block`是定时器触发时执行的任务。 例如,如果我们想要每秒钟执行一次任务,可以这样写: ```swift ZXCTimer....
- 使用`dispatch_get_main_queue()`确保在主线程上执行任务,保持UI更新同步。 - 与`NSTimer`不同,GCD定时器需要在不再使用时明确释放,通常在`dispatch_release`中完成。 3. **performSelector:withObject:...
参数包括时间间隔、目标对象、选择器方法、用户信息(可选)以及是否重复执行。 ```swift let timer = NSTimer(timeInterval: 1.0, target: self, selector: #selector(handleTimerFired), userInfo: nil, ...
`NSTimer`是Foundation框架的一部分,它提供了一种调度机制,可以在未来的某个时间点或以固定间隔重复执行某项任务。`timerWithTimeInterval`是`NSTimer`类的类方法,用于创建一个单次或周期性的定时器。该方法的...
`NSTimer`是Foundation框架的一部分,可以被用来安排在未来某个特定的时间执行特定的任务。下面我们将深入探讨如何在Objective-C中使用定时器。 1. **创建NSTimer**: - `NSTimer`可以通过`+...
这里,`seconds`是定时器间隔,`yourMethod:`是待调用的方法,`userInfo`是可选的数据传递参数,`repeats`表示是否重复执行。 然而,`NSTimer`有一些需要注意的点: 1. **生命周期管理**:`NSTimer`必须与运行循环...