iOS runloop与定时器的使用
来源:互联网 发布:核盾网络验证源码 编辑:程序博客网 时间:2024/06/17 01:20
runloop有五种工作模式
其中较为常用的是以下三种
kCFRunLoopDefaultMode--默认模式
UITrackingRunLoopMode--界面跟踪模式
NSRunLoopCommonModes --占位模式
每当用户拖拽界面时,runloop就会由默认模式,进入界面跟踪模式。
所以在设置NSTimer,工作在runloop的mode时要注意实际应用场景。
定时器是其中一种触发源,所以定时器的使用必须结合runloop工作模式的设置
下面是runloop下使用NSTimer的几种方式
// 0.没有设置runloop模式的方式 // [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(show) userInfo:nil repeats:YES]; // 1.创建NSTimer NSTimer *timer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(show) userInfo:nil repeats:YES]; // 2.1.添加到runloop // 把定时器添加到当前的runloop中,并选择默认运行模式 // kCFRunLoopDefaultMode == NSDefaultRunLoopMode // 但是这种模式下如果拖拽界面,runloop会自动进入UITrackingMode,优先于定时器追踪模式 [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode]; // 2.2.我们更改一下模式UITrackingRunLoopMode // 当runloop的模式是UITrackingRunLoopMode时定时器才工作 [[NSRunLoop currentRunLoop] addTimer:timer forMode:UITrackingRunLoopMode]; // 2.3.还有一种runloop的mode,占位运行模式 // 就可以无论是界面追踪还是普通模式都可以运行 /** common modes = <CFBasicHash 0x7fb7424021b0 [0x10f12f7b0]>{type = mutable set, count = 2, entries => 0 : <CFString 0x11002a270 [0x10f12f7b0]>{contents = "UITrackingRunLoopMode"} 2 : <CFString 0x10f14fb60 [0x10f12f7b0]>{contents = "kCFRunLoopDefaultMode"} */ /** NSTimer的问题,NSTimer是runloop的一个触发源,由于NSTimer是添加到runloop中使用的,所以如果只添加到default模式,会导致拖拽界面的时候runloop进入界面跟踪模式而定时器暂停运行,不拖拽又恢复的问题,这时候就应该使用runloop的NSRunLoopCommonModes模式,能够让定时器在runloop两种模式切换时也不受影响。 */ [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
0 0
- iOS runloop与定时器的使用
- iOS中定时器和RunLoop的设定
- IOS在子线程中使用定时器,将定时器添加至RunLoop中(转)
- IOS在子线程中使用定时器,将定时器添加至RunLoop中
- IOS在子线程中使用定时器,将定时器添加至RunLoop中
- IOS在子线程中使用定时器,将定时器添加至RunLoop中
- IOS在子线程中使用定时器,将定时器添加至RunLoop中
- iOS中多线程与runloop的介绍
- (iOS开发) RunLoop与NSTimer的相关
- ios runloop 与多线程
- IOS定时器的使用
- iOS-定时器的使用
- iOS 的RunLoop初识
- ios runloop的初探
- iOS RunLoop 的 Mode
- 认识iOS的RunLoop
- iOS runloop 详解3 子线程runloop的启动与停止
- iOS开发 ☞ Runloop使用
- 单目摄像机标定程序(using openCV functions)
- 页面当含有多条数据时,跳转到第二页时,无法选择第二页数据记录解决
- ROS 进阶学习笔记(15) - Use Service to play ROS-Serial communication
- 浅谈CocoaPods那点事。。。
- js array.find()扩展
- iOS runloop与定时器的使用
- ssh配置无密码登录,以及配置完不能登录的解决方法
- sql点滴39—解决数据库日志文件过大的问题
- 深入了解iOS代理设计模式
- caffe dataset
- transitionFromViewController 改变VC.view.frame 大小不起作用的问题
- 欢迎使用CSDN-markdown编辑器
- SSM框架中以注解形式实现事务管理
- 默认加载地图,主页设置