nstimer

我如何使用NSTimer?

…衆ロ難τιáo~ 提交于 2020-03-01 16:17:44
我如何使用 NSTimer ? 谁能给我一步一步的指示? #1楼 像这样的东西: NSTimer *timer; timer = [NSTimer scheduledTimerWithTimeInterval: 0.5 target: self selector: @selector(handleTimer:) userInfo: nil repeats: YES]; #2楼 首先,我想提请你注意Cocoa / CF文档(它始终是一个很棒的第一个调用端口)。 Apple文档在每篇参考文章的顶部都有一个名为“Companion Guides”的部分,其中列出了所记录主题的指南(如果存在)。 例如,使用 NSTimer , 文档 列出了两个配套指南: Cocoa的计时器编程主题 线程编程指南 对于您的情况,定时器编程主题文章可能是最有用的,而线程主题是相关的,但不是与所记录的类最直接相关。 如果你看一下Timer Programming Topics的文章,它分为两部分: 计时器 使用计时器 对于采用这种格式的文章,通常会有类的概述及其用途,然后是一些关于 如何 使用它的示例代码,在本例中是“使用计时器”部分。 有关“创建和调度定时器”,“停止定时器”和“内存管理”的部分。 从文章中,创建一个计划的,非重复的计时器可以这样做: [NSTimer

Swift 4 Timer Crashes with NSException

陌路散爱 提交于 2020-02-14 00:42:23
问题 I've been searching for a way to use a Timer in Swift 4 and looked at this article. I test out my code in xcode and when the the timer first ticks (in this case after 10 seconds) the app crashes and I get an error, although the build succeeded. 2017-11-20 19:54:42.781502-0700 Rock Prodigy[3022:554505] -[_SwiftValue tick]: unrecognized selector sent to instance 0x608000051520 2017-11-20 19:54:42.791278-0700 Rock Prodigy[3022:554505] *** Terminating app due to uncaught exception

Unrecognized selector sent to instance NSTimer Swift

狂风中的少年 提交于 2020-02-13 09:43:52
问题 I'm trying to developing an app that includes a simple Stopwatch feature. I'm using Xcode 6 and the Swift language. Here is the code in FirstViewController @IBAction func Stopwatch (Sender:UIButton) { var startTime = NSTimeInterval() func updateTime(timer:NSTimer) { //Find Current TIme var currentTime = NSDate.timeIntervalSinceReferenceDate() //Find the difference between current time and start time var elapsedTime :NSTimeInterval = currentTime - startTime //calculate the minutes in elapsed

iOS 定时器的比较

荒凉一梦 提交于 2020-02-11 05:57:23
然而,在iOS中有很多方法完成以上的任务,到底有多少种方法呢?经过查阅资料,大概有三种方法:NSTimer、CADisplayLink、GCD。接下来我就一一介绍它们的用法。 一、NSTimer 1. 创建方法 1 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(action:) userInfo:nil repeats:NO]; TimerInterval : 执行之前等待的时间。比如设置成1.0,就代表1秒后执行方法 target : 需要执行方法的对象。 selector : 需要执行的方法 repeats : 是否需要循环 2. 释放方法 1 [timer invalidate]; 注意 : 调用创建方法后,target对象的计数器会加1,直到执行完毕,自动减1。如果是循环执行的话,就必须手动关闭,否则可以不执行释放方法。 3. 特性 存在延迟 不 管是一次性的还是周期性的timer的实际触发事件的时间,都会与所加入的RunLoop和RunLoop Mode有关,如果此RunLoop正在执行一个连续性的运算,timer就会被延时出发。重复性的timer遇到这种情况,如果延迟超过了一个周期,则 会在延时结束后立刻执行

NSTimer的使用详解

自闭症网瘾萝莉.ら 提交于 2020-02-11 05:24:11
NSTimer fire 我们先用 NSTimer 来做个简单的计时器,每隔5秒钟在控制台输出 Fire 。比较想当然的做法是这样的: @interface DetailViewController () @property (nonatomic, weak) NSTimer *timer; @end @implementation DetailViewController - (IBAction)fireButtonPressed:(id)sender { _timer = [NSTimer scheduledTimerWithTimeInterval:3.0f target:self selector:@selector(timerFire:) userInfo:nil repeats:YES]; [_timer fire]; } -(void)timerFire:(id)userinfo { NSLog(@"Fire"); } @end 运行之后确实在控制台每隔3秒钟输出一次 Fire ,然而当我们从这个界面跳转到其他界面的时候却发现:控制台还在源源不断的输出着 Fire 。看来 Timer 并没有停止。 invalidate 既然没有停止,那我们在 DemoViewController 的 dealloc 里加上 invalidate 的方法: -(void)dealloc

iOS 中的 NSTimer

大城市里の小女人 提交于 2020-02-11 05:13:10
iOS 中的 NSTimer NSTimer fire 我们先用 NSTimer 来做个简单的计时器,每隔5秒钟在控制台输出 Fire 。比较想当然的做法是这样的: @interface DetailViewController () @property (nonatomic, weak) NSTimer *timer; @end @implementation DetailViewController - (IBAction)fireButtonPressed:(id)sender { _timer = [NSTimer scheduledTimerWithTimeInterval:3.0f target:self selector:@selector(timerFire:) userInfo:nil repeats:YES]; [_timer fire]; } -(void)timerFire:(id)userinfo { NSLog(@"Fire"); } @end 运行之后确实在控制台每隔3秒钟输出一次 Fire ,然而当我们从这个界面跳转到其他界面的时候却发现:控制台还在源源不断的输出着 Fire 。看来 Timer 并没有停止。 invalidate 既然没有停止,那我们在 DemoViewController 的 dealloc 里加上 invalidate 的方法:

NSTimer使用注意事项

这一生的挚爱 提交于 2020-02-11 01:05:12
1.scheduled开头和非schedule的开头方法的区别。系统框架提供了几种创建NSTimer的方法,其中以scheduled开头的方法会自动把timer加入当前run loop,到了设定的时间点就会触发指定的方法,而没有scheduled开头的方法则需要程序员自己手动添加到timer到一个run loop中才会有效。run loop在运行时一般有两个mode,一个defaultmode,一个trackingmode,正常情况下run loop使用defaultmode,scheduled生成的timer会默认添加到defaultmode中,当我们互动scrollview时,run loop切换到trackingmode运行,于是我们发现定时器失效了。为了使定时器在我们滑动scrollview时也能正常运行,我们需要确保defaultmode和trackingmode里都添加了我们生成的timer。如: NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:_timeInterval target:self selector:@selector(addone) userInfo:nil repeats:YES]; [[NSRunLoop currentRunLoop] addTimer:timer forMode

GCD实现多个定时器,完美避过NSTimer的三大缺陷(RunLoop、Thread、Leaks)

落花浮王杯 提交于 2020-02-11 01:04:39
定时器在我们每个人做的iOS项目里面必不可少,如登录页面倒计时、支付期限倒计时等等,一般来说使用NSTimer创建定时器: + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo; + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo; But 使用NSTimer需要注意一下几点: 1、必须保证有一个活跃的RunLoop。 系统框架提供了几种创建NSTimer的方法,其中以scheduled开头的方法会自动把timer加入当前RunLoop,到了设定时间就会触发selector方法,而没有scheduled开头的方法则需要手动添加timer到一个RunLoop中才会有效。程序启动时,会默认启动主线程的RunLoop并在程序运行期内有效

NSTimer循环引用的问题

六眼飞鱼酱① 提交于 2020-02-11 01:03:39
前言: 记得之前看过一个面试题问:ARC环境下的dealloc方法有什么用?问题解答是:代理指针置空,停止定时器timer,注销通知,释放掉实例变量。看着没什么问题,而且网上一收也是大概这样的答案。今天算是被实实在在的坑了一把,唉,其实说是被坑不如说是自己对定时器NSTimer没有一个足够的认识,我们总是习惯性的看着别人给好的答案而懒得去看API文档仔细分析。 定时器NSTimer: 最近做的一个公司项目有一个需求,当你进入到某一个视图控制器中定时器timer开始启动并在1秒内触发timerAction:方法。然后在视图控制器中销毁的时候停止定时器。于是乎: > self . mytimer = [ NSTimer scheduledTimerWithTimeInterval : 1 target :weakSelf selector : @selector (timerAction:) userInfo : nil repeats : YES ]; [[ NSRunLoop currentRunLoop ] addTimer : self . mytimer forMode : NSRunLoopCommonModes ]; > #**并且在dealloc方法里面销毁定时器**    -( void )dealloc   {   [ self . mytimer

NSTimer类的使用

﹥>﹥吖頭↗ 提交于 2020-02-11 01:02:50
创建一个 Timer + scheduledTimerWithTimeInterval: invocation: repeats: + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo; + scheduledTimerWithTimeInterval: target: selector: userInfo: repeats: + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo; 创建返回一个新的 NSTimer 对象和时间表,在当前的默认模式下循环调用一个实例方法。 + timerWithTimeInterval: invocation: repeats: + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation