首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果某个操作正在运行,如何将NSTimer设置为停止?

在iOS开发中,可以通过以下步骤将NSTimer设置为停止:

  1. 首先,需要保留对NSTimer对象的引用,以便稍后可以取消它。可以在类的属性中声明一个NSTimer变量,或者在方法内部使用一个实例变量。
  2. 要停止正在运行的NSTimer,可以使用invalidate()方法。调用invalidate()方法后,NSTimer将停止触发,并且不会再次启动。

下面是一个示例代码:

代码语言:swift
复制
// 在类中声明一个NSTimer变量
var timer: NSTimer?

// 启动NSTimer
timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(timerFired), userInfo: nil, repeats: true)

// 停止NSTimer
timer?.invalidate()
timer = nil

// NSTimer触发的方法
@objc func timerFired() {
    // 处理定时器触发事件
}

在上面的示例中,首先声明了一个NSTimer变量timer。然后使用scheduledTimerWithTimeInterval()方法创建并启动了一个NSTimer,每隔1秒触发一次timerFired()方法。最后,通过调用invalidate()方法停止NSTimer,并将timer变量置为nil,释放对NSTimer的引用。

这样,当需要停止正在运行的NSTimer时,只需调用timer?.invalidate()即可。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

定时器 你真的会使用吗?

释放方法: // 停止定时器 [timer invalidate]; 实际开发中,我们会将NSTimer对象设置属性,这样方便释放。...存在延迟 不管是一次性的还是周期性的timer的实际触发事件的时间,都会与所加入的RunLoop和RunLoop Mode有关,如果此RunLoop正在执行一个连续性的运算,timer就会被延时出发。...重复性的timer遇到这种情况,如果延迟超过了一个周期,则会在延时结束后立刻执行,并按照之前指定的周期继续执行,这个延迟时间大概50-100毫秒....被启动了;执行`invalidate`操作时,CADisplayLink对象就会从runloop中移除,`selector`调用也随即停止,类似于NSTimer的`invalidate`方法。...一般程序进入后台时,定时器会停止,但是在定位APP中,需要持续进行定位,APP在后台时依旧可以运行,所以在后台定时器也是可以运行的。

95420

iOS定时器,你真的会使用吗?前言正文结语

释放方法: // 停止定时器 [timer invalidate]; 实际开发中,我们会将NSTimer对象设置属性,这样方便释放。...存在延迟 不管是一次性的还是周期性的timer的实际触发事件的时间,都会与所加入的RunLoop和RunLoop Mode有关,如果此RunLoop正在执行一个连续性的运算,timer就会被延时出发。...重复性的timer遇到这种情况,如果延迟超过了一个周期,则会在延时结束后立刻执行,并按照之前指定的周期继续执行,这个延迟时间大概50-100毫秒....被启动了;执行invalidate操作时,CADisplayLink对象就会从runloop中移除,selector调用也随即停止,类似于NSTimer的invalidate方法。...一般程序进入后台时,定时器会停止,但是在定位APP中,需要持续进行定位,APP在后台时依旧可以运行,所以在后台定时器也是可以运行的。

2.4K50
  • 各种定时器–最全的定时器使用

    1s, 大概延迟了1s才开始执行block里的内容; 这里的停止定时器, 我直接在block里进行的, 如果使用一个全局变量来再其他地方手动停止定时器,需要这样进行: [self.timer invalidate...,selector(_cmd) // 如果有多个参数, 可依次设置3 4 5 ......, 例如开启时间, 这些直接参考其API 进行设置即可; 注意: 以上实例中, 我没有使用全局的NSTimer 对象, 如果设置全局变量, 或者设置属性, 在停止定时器的时候要手动置nil, 即:...使用 dispatch_walltime 可以让计时器按照真实时间间隔进行计时; interval: 间隔(如果设置 DISPATCH_TIME_FOREVER 则只执行一次) leeway...CADisplayLink CADisplayLink默认每秒运行60次,通过它的 frameInterval 属性改变每秒运行帧数,如设置2,意味CADisplayLink每隔一帧运行一次,有效的逻辑每秒运行

    2.3K30

    编码篇-ARC下的内存泄漏

    前言 内存泄露是一个相对挺严重的问题,可是它的存在未引起足够的重视,如果程序运行时一直分配内存而不及时释放无用的内存,程序占用的内存越来越大,直到把系统分配给该APP的内存消耗殚尽,程序因无内存可用导致崩溃...** NSTimer的使用** NSTimerNSTimer会对它的target持有强引用,如果NSTimer不释放掉,就会一直持有它的target的强引用,如果这个NSTimer在被target强引用...所以如果你使用的 selector 有返回值,一定要处理掉 手动释放(置 nil)。...所以在delloc方法中要将对应的assign代理设置nil,如: - (void)viewDidDisappear:(BOOL)animate { self.myTableView.delegate...一般自己写的一些delegate,我们会用weak,而不是assign,weak的好处是当对应的对象被回收时,指针也会自动被设置nil。

    1.7K20

    iOS开发:解决App进入后台,倒计时(定时器)不能正常计时的问题

    前言 在iOS开发过程中,尤其是发送短信验证码的需求是非常常见的需求,这就涉及到倒计时的使用,但是如果正在倒计时操作,app进入后台运行,倒计时会出现什么效果呢?那么本篇博文就来了解一下相关知识吧。...项目需求: 点击操作之后倒计时开始,然后App在后台运行,倒计时不停止继续执行。短信验证码 、时间倒计时等情况都适用这个需求。...常理: iOS程序进入后台运行,10分钟之内就会被系统“杀死”,所以倒计时会停止执行。 解决思路: 方法一:根据记录开始的时间和获取当前时间进行时间差操作进行处理。...监听进入前台、进入后台的消息,在进入后台的时候存一下时间戳,停掉定时器(系统会强制停止定时器);在再进入前台时,计算时间差。若剩余的时间大于时间差,就减去时间差,否则赋值剩余时间0。...,完成定时器在后台执行,倒计时不停止的效果。

    6.6K84

    UIScrollView

    directionalLockEnabled; //10.控制滚动视图是否反弹过去内容的边缘,然后再返回一个布尔值 @property(nonatomic) BOOL bounces; //11.如果这个属性被设置成...decelerating; //26.一个布尔值,决定是否推迟滚动视图触摸手势的处理 @property(nonatomic) BOOL delaysContentTouches; //27.如果这个值设置...YES,那么当你在UIScrollView上面放置任何子视图的时候,当你在子视图上移动的时候,UIScrollView会给子视图发送touchCancel消息,而如果该属性设置NO,ScollView...如果它从这种方法受到NO便停止拖动和转发触摸时间的内容子视图。...:NSRunLoopCommonModes // 主线程不管在处理什么操作,都会抽时间处理NSTimer [[NSRunLoop mainRunLoop] addTimer:self.timer forMode

    1.8K60

    iOS学习——浅谈RunLoop

    如果有了Runloop,那么相当于在内部有一个死循环,能够保证程序的持续运行 main函数中的Runloop  a 在UIApplication函数内部就启动了一个Runloop 该函数返回一个int...的运行模式mode设置kCFRunLoopDefaultMode,这种模式在界面被拖拽时运行mode变为UITrackingRunLoopMode,这时候defaultmode下的定时器就会停止工作,...)repeats block:(void (^)(NSTimer *timer))block;   解决上述所说的定时器不准的方案是设置RunLoop的工作modekCFRunLoopCommonModes...一个mode里面可以添加多个NSTimer,也就是说以后当创建NSTimer的时候,可以指定它是在什么模式下运行的。...(2)它是基于时间的触发器,说直白点那就是时间到了我就触发一个事件,触发一个操作

    71621

    老司机带你走进Core Animation 之CADisplayLink

    不过需要说明的一点是,如果CPU过于繁忙,duration的值是会浮动的。 paused,看名字就能看出来,是控制计时器暂停与恢复的属性。设置YES的时候会暂停事件的触发。...如果timer设置的repeatNO,则fire之后timer立即销毁。如果timer的repeatYES,则到了之前设置的时间他依旧会按部就班的触发事件。...所以正如上面提到过的,如果你的定时器加到NSDefaultRunLoopMode中那么滚动的时候,计时器动作就停止了。...另外需要注意的是,dispatch_source_t 一定要被设置成员变量,否则将会立即被释放。 关于GCD的timer使用起来相对简单,不过,其实操作不当的话也会造成内存泄漏!...同时如果某个源挂起后不需要恢复则直接调用dispatch_source_cancel销毁就好。 GCDTimer的优势:不受当前runloopMode的影响。

    1.5K20

    《Effective Objective-C》干货三部曲(二):规范篇

    而且,如果自己开发的程序使用到了第三方库,也应该加上前缀。 第18条:尽量使用不可变对象 书中作者建议尽量把对外公布出来的属性设置只读,在实现文件内部设为读写。...具体做法是: 在头文件中,设置对象属性readonly,在实现文件中设置readwrite。这样一来,在外部就只能读取该数据,而不能修改它,使得这个类的实例所持有的数据更加安全。...因为如果将friends属性设置可变的,那么外部就可以随便更改set集合里的数据,这里的更改,仅仅是底层数据的更改,并不伴随其他任何操作。...100,将开销值设置5MB。...值得注意的一点是,如果子类没有实现它,它的超类却实现了,那么就会运行超类的代码:这个情况往往很容易让人忽视。 看一下?

    81110

    iOS-RunLoop充满灵性的死循环

    但是必须至少有一个Source或者Timer,因为如果Mode空,RunLoop运行到空模式不会进行空转,就会立刻退出。...每一段时间执行一些事情时滑动UIScrollView,NSTimer就会暂停,当我们停止滑动以后,NSTimer又会重新恢复的情况,我们通过一段代码来看一下 代码中的注释也很重要,展示了我们探索的过程...,间隔时间,精准度 /* 第1个参数:要给哪个定时器设置 第2个参数:开始时间 第3个参数:间隔时间 第4个参数:精准度 一般0 在允许范围内增加误差可提高程序的性能...,RunLoop会立刻退出 我们在启动RunLoop的时候可以设置什么时候停止 [NSRunLoop currentRunLoop]runUntilDate:...,如果在RunLoop跑起来之后打印,RunLoop先运行起来,已经在跑圈了就出不来了,进入死循环也就无法执行后面的操作了。

    1.6K80

    《Effective Objective-C》干货三部曲(二):规范篇

    而且,如果自己开发的程序使用到了第三方库,也应该加上前缀。 第18条:尽量使用不可变对象 书中作者建议尽量把对外公布出来的属性设置只读,在实现文件内部设为读写。...具体做法是: 在头文件中,设置对象属性readonly,在实现文件中设置readwrite。这样一来,在外部就只能读取该数据,而不能修改它,使得这个类的实例所持有的数据更加安全。...因为如果将friends属性设置可变的,那么外部就可以随便更改set集合里的数据,这里的更改,仅仅是底层数据的更改,并不伴随其他任何操作。...100,将开销值设置5MB。...值得注意的一点是,如果子类没有实现它,它的超类却实现了,那么就会运行超类的代码:这个情况往往很容易让人忽视。 看一下?

    90821

    iOS开发之UITableView中计时器的几种实现方式(NSTimer、DispatchSource、CADisplayLink)

    从该运行效果中我们不难发现,当我们滑动TableView时,该定时器就停止了工作。...因为Timer默认是添加在RunLoop上的DefaultMode上的,当Mode切换后Timer就停止运行。 但是当停止滑动后,Mode又切换了回来,所以Timer有可以正常工作了。 ?...从下方运行结果不难看出,当TableView滑动时,打印出的currentModelUITrackingRunLoopMode。...如果你对RunLoop比较熟悉的话,可以知道CommonModes就是DefaultMode和TrackingRunLoopMode的集合,所以我们只需要将NSTimer对象与当前线程所对应的RunLoop...当然在子线程中更新UI还是需要在主线程中去操作的。下方就是上述代码的运行效果。从该效果中我们不难看出,当滑动TableView时定时器是可以正常工作的。 ?

    1.4K70

    iOS底层原理总结 - RunLoop

    RunLoop简介 运行循环,在程序运行过程中循环做一些事情,如果没有Runloop程序执行完毕就会立即退出,如果有Runloop程序会一直运行,并且时时刻刻在等待用户的输入操作。...但是必须至少有一个Source或者Timer,因为如果Mode空,RunLoop运行到空模式不会进行空转,就会立刻退出。...每一段时间执行一些事情时滑动UIScrollView,NSTimer就会暂停,当我们停止滑动以后,NSTimer又会重新恢复的情况,我们通过一段代码来看一下 代码中的注释也很重要,展示了我们探索的过程...,RunLoop会立刻退出 我们在启动RunLoop的时候可以设置什么时候停止 [NSRunLoop currentRunLoop]runUntilDate:...,如果在RunLoop跑起来之后打印,RunLoop先运行起来,已经在跑圈了就出不来了,进入死循环也就无法执行后面的操作了。

    1.4K70

    多线程与NSTimer

    1.Ios主线程,也称UI线程,在主线程中使用NSTimer,runloop是自动开启的,(如果NSTimer当前所处的线程正在进行大数据处理(假设为一个大循环),NSTimer本次执行会等到这个大数据处理完毕之后才会继续执行...(类似操作列表的滑动过程,定时器不会),所以用NSRunLoopCommonModes模式,而NSDefaultRunLoopMode不可行)。...在主线程中调用 NSTimer *timer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(timer_callback...forMode:NSRunLoopCommonModes]; 2.在子线程中(NSThread开辟新的子线程),使用计时器时,需要[[NSRunLoop currentRunLoop] run],(如果...NSTimer当前所处的线程正在进行大数据处理(假设为一个大循环),(类似操作列表的滑动过程)使用NSDefaultRunLoopMode模式NSTimer会正常的运行

    1.2K50

    深入理解RunLoop及在开发中的应用

    当我们点击运行,系统运行 UIApplicationMain 函数,系统进入了:主线程 main 的运行循环。RunLoop 使得主线程一直处在运行循环中。...,也就保证了程序的持续运行。...这个时候就可以开启一个子线程,把耗时的操作放到子线程中。子线程做完事情以后,就会销毁。有时我们不希望子线程大量的创建和销毁,就可以使用 RunLoop 控制子线程的生命周期。...解决NSTimer在UIScrollView滑动时停止工作的问题 默认情况下,在滚动 tableView、UIScrollView 的时候,NSTimer停止工作,这是因为在滚动时,RunLoop...例如:UIScrollView+ NSTimer演示滚动时,定时器停止工作 - (void)viewDidLoad { [super viewDidLoad]; UIScrollView

    1.3K20

    iOS多线程——你要知道的RunLoop都在这里你要知道的iOS多线程NSThread、GCD、NSOperation、RunLoop都在这里

    Mode来执行,如果要切换Mode则需要退出运行后指定一个新的Mode后重新执行运行。...Timer CFRunLoopTimerRef Timer可以理解定时器即NSTimer,因为CFRunLoopTimerRef和NSTimer是toll-free bridged,所以可以互相转换,...将其理解NSTimer即可,RunLoop对象会在注册的定时器时间到达时唤醒关联的线程对象来执行定时器的回调。..., World222"); }]; } 上面的栗子创建了两个NSTimer,这两个定时器执行效果相同,但如果页面中有一个UIScrollView或其子类的对象在滑动时,NSTimer就不会再有任何输出...,mode里没空,loop也没被停止,那继续loop。

    1.5K80

    iOS计时器:NSTimer

    我们这里有两个方案: ① 将 target 分离出来独立成一个 WeakProxy 代理对象, NSTimer 的 target 设置 WeakProxy 代理对象,WeakProxy 是 TimerViewController...; } @end ② 通过category 把 NSTimer 的 target 设置 NSTimer 类,让 NSTimer 自身做为target, 把 selector 通过 block...如果 RunLoop 执行了一个很长时间的任务,错过了某个时间点,则那个时间点的回调也会跳过去,不会延后执行。比如 00:02 这个时间点被错过了,那么就只能等待下一个时间点 00:04 。...因此如果对时间精度要求高的方法就不要使用NSTimer。...如果当前线程是主线程(UI线程),比如UIScrollView的滚动操作,RunLoop模式自动会被切换成NSEventTrackingRunLoopMode,在这个过程中,默认的NSDefaultRunLoopMode

    1.7K20

    浅析RunLoop原理及其应用

    如果不杀掉APP则APP一直运行,就是因为RunLoop循环一直开启状态保证主线程不会被摧毁。这也是RunLoop的作用之一保证线程不退出。...4.RunLoop的应用 例如创建一个比较常见的注册页面,里面用NSTimer来自处理常见的验证码倒计时,每秒处理一下,如果NSTimer添加到的是默认模式的RunLoop这时候注册页面有一个展示注册协议的...如果觉得NSTimer设置RunLoop模式很复杂可以尝试用GCD的Timer用法很简便。 ? RunLoop在TableView中的应用(解决滑动卡顿问题)。 ?...如图代码展示,当加载高清大图渲染屏幕,而此时不得不在主线程操作,会引起滑动的卡顿。 tableview 在加载 cell 时如果遇到多个耗时操作会有点卡顿。...将耗时操作放到 DefaultMode 里只能解决滑动时流畅,但是停止时需要加载耗时,仍然会有卡顿的感觉。

    94120
    领券