Runloop的最简单使用
来源:互联网 发布:sql server数据库备份 编辑:程序博客网 时间:2024/06/01 09:36
对于Runloop,写写自己的使用场景。比较详细、深入的讲解可以看这里这里,。
AFURLConnectionOperation 这个类是基于 NSURLConnection 构建的,其希望能在后台线程接收 Delegate 回调。为此 AFNetworking 单独创建了一个线程,并在这个线程中启动了一个 RunLoop:
+ (void)networkRequestThreadEntryPoint:(id)__unused object { @autoreleasepool { [[NSThread currentThread] setName:@"AFNetworking"]; 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;}
RunLoop 启动前内部必须要有至少一个 Timer/Observer/Source,所以 AFNetworking 在 [runLoop run] 之前先创建了一个新的 NSMachPort 添加进去了。通常情况下,调用者需要持有这个 NSMachPort (mach_port) 并在外部线程通过这个 port 发送消息到 loop 内;但此处添加 port 只是为了让 RunLoop 不至于退出,并没有用于实际的发送消息。
- (void)start { [self.lock lock]; if ([self isCancelled]) { [self performSelector:@selector(cancelConnection) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]]; } else if ([self isReady]) { self.state = AFOperationExecutingState; [self performSelector:@selector(operationDidStart) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]]; } [self.lock unlock];}
我的NSTimer与Runloop的第一次应用 O(∩_∩)O~
if (!self.refreshQRCodeTimer) { self.refreshQRCodeTimer = [NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(requestUserSelfQRCodeStr) userInfo:nil repeats:YES]; [[NSRunLoop currentRunLoop] addTimer:self.refreshQRCodeTimer forMode:NSRunLoopCommonModes]; }
iOS这东西,越做越感觉自己菜鸡,需要深入学习的东西还有很多啊!
0 0
- Runloop的最简单使用
- RunLoop的一些简单使用
- runloop的基本使用
- Runloop的使用
- runloop的使用
- Runloop的使用
- runloop简单介绍及使用技巧
- runtime和RunLoop的使用
- NSTimer的两种创建方式以及跟RunLoop的简单结合使用
- Btrace最简单的使用。
- 最简单的webView使用
- EventBus最简单的使用
- Notification 最简单的使用
- JTree的最简单使用:
- ViewPager的最简单使用
- Rxjava的最简单使用
- SimpleDateFormat最简单的使用
- jiecaovideoplayer最简单的使用
- 计算语言学之开篇随想
- 辛普森悖论
- 单链表逆转
- CS0619号错误是什么
- MFC: 获得关机消息;阻止Windows关机
- Runloop的最简单使用
- web界面设计的原则和总结
- angularjs http 无刷新调用
- Android基础之CountDownLatch
- BeautifulSoup不能完整识别网页html代码
- 操作符重载 – 下 --- 用 成员函数 来重载操作符
- react-native-code-push与cocoapods pod 'SSZipArchive'冲突
- 关键字typedef与#define的异同
- 修改Tomcat默认端口号