runloop简单介绍及使用技巧
来源:互联网 发布:淘宝创立于哪一年 编辑:程序博客网 时间:2024/06/14 15:29
一、RunLoop定义
当有持续的异步任务需求时,我们会创建一个独立的生命周期可控的线程。RunLoop就是控制线程生命周期并接受事件进行处理的机制。
RunLoop是iOS事件响应与任务处理最核心的机制,它贯穿于整个iOS系统。
二、RunLoop目的
通过RunLoop机制实现省电,流畅,响应速度快,用户体验好
三、RunLoop特性
1.主线程的RunLoop在应用启动时就会自动创建,其他线程需要在该线程下自己启动,不能自己创建RunLoop
四、RunLoopModes
1.NSDefaultRunLoopMode:默认模式
2.NSConnectionReplyMode:用来监听网络请求NSConnection的事件
3.NSModalPanelRunLoopMode:OS X的Modal面板事件
4.UITrackingRunLoopMode:拖动事件
5.NSRunLoopCommonModes:是一个模式集合
五、RunLoop应用
(1)在主线程启动一个定时器Timer,然后拖动UItableview或UIScrollView,计时器不执行。只是因为为了更好的用户体验,在主线程中event tracking模式优先级最高。在用户拖动控件时,主线程的RunLoop是运行在evevt tracking mode下,而创建的Timer是默认关联的Default Mode,因此系统不会立即执行Default Mode下接收的事件。解决方法:
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timeAction) userInfo:nil repeats:YES]; [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];// [[NSRunLoop currentRunLoop] addTimer:timer forMode:UITrackingRunLoopMode];(2)维护线程的生命周期,让线程不自动退出,isFinished为YES时退出
<span style="font-size:14px;">[[NSRunLoop currentRunLoop] addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode]; while (!self.isCancelled && !self.isFinished) { @autoreleasepool { [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:3]]; } }</span>
(3)AFNetworking中创建一个常驻线程
+ (void)networkRequestThreadEntryPoint:(id)__unused object { @autoreleasepool { [[NSThread currentThread] setName:@"AFNetworking"]; //这里主要是监听某个port,目的是让这个thread不会回收,即常驻线程 NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; [runLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode]; [runLoop run]; }}+ (NSThread *)networkRequestThread { static NSThread *_networkRequestThread = nil; static dispatch_once_t oncePredicate; dispatch_once(&oncePredicate, ^{ _networkRequestThread = [[NSThread alloc] initWithTarget:self selector:@selector(networkRequestThreadEntryPoint:) object:nil]; [_networkRequestThread start]; }); return _networkRequestThread;}
0 0
- runloop简单介绍及使用技巧
- iOS runloop简单介绍
- ios-Runloop简单介绍
- RunLoop的一些简单使用
- Runloop的最简单使用
- iOS 多线程编程<十五、RunLoop简单介绍>
- Spotlight简单介绍及使用
- Handler介绍及简单使用
- Eigen介绍及简单使用
- CString简单介绍及使用
- Eigen介绍及简单使用
- Eigen介绍及简单使用
- FreeMarker简单使用及介绍
- Ajax简单介绍及使用
- Eigen介绍及简单使用
- ThreadPoolExecutor简单介绍及使用
- runloop介绍
- Fresco的简单介绍及简单使用
- 用java代码实现二叉树的遍历算法
- java设计模式之命令模式
- 汉语拼音工具包相关实用方法
- Android项目编码的批量修改(GBK转UTF-8)
- springmvc和struts2的区别:
- runloop简单介绍及使用技巧
- LightOJ 1259 Goldbach`s Conjecture(数论)
- lighttpd-1.4.39 : mod_staticfile
- 浅谈百度外卖筛选悬浮框效果的实现
- 解决中文乱码问题
- Spark GraphX原理介绍
- 俄罗斯方块C++源码
- pthread_detach()函数
- cocos2dx给DrawNode的shader传递Texture2D