runloop

Is there any guide for iOS runloop mechanism?

妖精的绣舞 提交于 2019-12-18 10:46:33
问题 I'm learning socket communication on iPhone, and its guide said something about CFRunloop (it is a guide for CFNetwork , can this be used on iOS?) Where can I learn about runloop on iOS?API reference is not enough. 回答1: Look at the "Run Loops" chapter of Apple's Threading Programming Guide. In brief: There is one run loop associated with each thread. The run loop has to be run to do anything. Apple's application main function takes care of this for you on the main thread. A run loop is run in

Is NSTimer expected to fire when app is backgrounded?

不想你离开。 提交于 2019-12-17 05:08:11
问题 I don't understand it at all but NSTimer in my app definitely is running in background. I have a NSLog in method run by the timer and it is logging while it's in background. It's on iPhone 4 with iOS 4.2.1. I have declared location background support in Info.plist. I read the docs and many discussions here and elsewhere and it shouldn't be possible. Is it an iOS bug? Or undocumented feature? I don't want to use it and find out in near future, for example with coming of iOS 4.3 that Apple

Is NSTimer expected to fire when app is backgrounded?

 ̄綄美尐妖づ 提交于 2019-12-17 05:08:03
问题 I don't understand it at all but NSTimer in my app definitely is running in background. I have a NSLog in method run by the timer and it is logging while it's in background. It's on iPhone 4 with iOS 4.2.1. I have declared location background support in Info.plist. I read the docs and many discussions here and elsewhere and it shouldn't be possible. Is it an iOS bug? Or undocumented feature? I don't want to use it and find out in near future, for example with coming of iOS 4.3 that Apple

深入理解RunLoop(二)

 ̄綄美尐妖づ 提交于 2019-12-16 11:21:14
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 其内部代码整理如下 (太长了不想看可以直接跳过去,后面会有说明): /// 用DefaultMode启动 void CFRunLoopRun(void) { CFRunLoopRunSpecific(CFRunLoopGetCurrent(), kCFRunLoopDefaultMode, 1.0e10, false); } /// 用指定的Mode启动,允许设置RunLoop超时时间 int CFRunLoopRunInMode(CFStringRef modeName, CFTimeInterval seconds, Boolean stopAfterHandle) { return CFRunLoopRunSpecific(CFRunLoopGetCurrent(), modeName, seconds, returnAfterSourceHandled); } /// RunLoop的实现 int CFRunLoopRunSpecific(runloop, modeName, seconds, stopAfterHandle) { /// 首先根据modeName找到对应mode CFRunLoopModeRef currentMode = __CFRunLoopFindMode(runloop,

Runloop的原理和核心机制

若如初见. 提交于 2019-12-16 11:19:03
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> RunLoop的定义 当有持续的异步任务需求时,我们会创建一个独立的生命周期可控的线程。RunLoop就是控制线程生命周期并接收事件进行处理的机制。 RunLoop是iOS事件响应与任务处理最核心的机制,它贯穿iOS整个系统。 Foundation: NSRunLoopCore Foundation: CFRunLoop 核心部分,代码开源,C 语言编写,跨平台 目的 通过RunLoop机制实现省电,流畅,响应速度快,用户体验好 理解 进程是一家工厂,线程是一个流水线,Run Loop就是流水线上的主管;当工厂接到商家的订单分配给这个流水线时,Run Loop就启动这个流水线,让流水线动起来,生产产品;当产品生产完毕时,Run Loop就会暂时停下流水线,节约资源。RunLoop管理流水线,流水线才不会因为无所事事被工厂销毁;而不需要流水线时,就会辞退RunLoop这个 主管,即退出线程,把所有资源释放。 RunLoop并不是iOS平台的专属概念,在任何平台的多线程编程中,为控制线程的生命周期,接收处理异步消息都需要类似RunLoop的循环机制实现,Android的Looper就是类似的机制。 特性 主线程的RunLoop在应用启动的时候就会自动创建 其他线程则需要在该线程下自己启动 不能自己创建RunLoop

深入理解RunLoop(三)

牧云@^-^@ 提交于 2019-12-16 11:15:57
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 苹果用 RunLoop 实现的功能 首先我们可以看一下 App 启动后 RunLoop 的状态: CFRunLoop { current mode = kCFRunLoopDefaultMode common modes = { UITrackingRunLoopMode kCFRunLoopDefaultMode } common mode items = { // source0 (manual) CFRunLoopSource {order =-1, { callout = _UIApplicationHandleEventQueue}} CFRunLoopSource {order =-1, { callout = PurpleEventSignalCallback }} CFRunLoopSource {order = 0, { callout = FBSSerialQueueRunLoopSourceHandler}} // source1 (mach port) CFRunLoopSource {order = 0, {port = 17923}} CFRunLoopSource {order = 0, {port = 12039}} CFRunLoopSource {order = 0,

【Runloop】深入理解原理和机制

只谈情不闲聊 提交于 2019-12-16 11:13:22
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> ###用runloop解决cpu空转 CPU调度线程工作的时候,其中每一个线程都是一个runloop。 也就是如果有任务的时候,runloop会让线程执行任务,没有任务时候会让runloop休眠。 换句话说,那什么是一个runloop?一个UI事件,一个timer,一个系统delegate都称之为runloop(不是NSRunloop), runloop实际上是从接收消息,然后处理完消息的一个完整过程。runloop使线程进入一个循环。 ###runloop运行模式 一种Runloop运行模式,就是一个要监控的Input和Timer事件源的集合或者是一个要通知的Runloop观察者的集合。 ###了解设置模式 NSDefaultRunLoopMode:默认的运行模式,用于大部分操作,除了NSConnection对象事件。 NSConnectionReplyMode:用来监控NSConnection对象的回复的,很少能够用到。 NSModalPanelRunLoopMode:用于标明和Mode Panel相关的事件。 NSEventTrackingRunLoopMode:用于跟踪触摸事件触发的模式(例如UIScrollView上下滚动)。 NSRunLoopCommonModes:是一个模式集合

深入理解RunLoop(一)

不打扰是莪最后的温柔 提交于 2019-12-16 11:08:52
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理。之后会介绍一下在 iOS 中,苹果是如何利用 RunLoop 实现自动释放池、延迟回调、触摸事件、屏幕刷新等功能的。 RunLoop 的概念 一般来讲,一个线程一次只能执行一个任务,执行完成后线程就会退出。如果我们需要一个机制,让线程能随时处理事件但并不退出,通常的代码逻辑是这样的: function loop() { initialize(); do { var message = get_next_message(); process_message(message); } while (message != quit); } 这种模型通常被称作 Event Loop 。 Event Loop 在很多系统和框架里都有实现,比如 Node.js 的事件处理,比如 Windows 程序的消息循环,再比如 OSX/iOS 里的 RunLoop。实现这种模型的关键点在于:如何管理事件/消息,如何让线程在没有处理消息时休眠以避免资源占用、在有消息到来时立刻被唤醒。 所以,RunLoop 实际上就是一个对象,这个对象管理了其需要处理的事件和消息

深入理解RunLoop(四)

不羁的心 提交于 2019-12-16 11:04:06
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 关于网络请求 iOS 中,关于网络请求的接口自下至上有如下几层: CFSocket CFNetwork ->ASIHttpRequest NSURLConnection ->AFNetworking NSURLSession ->AFNetworking2, Alamofire • CFSocket 是最底层的接口,只负责 socket 通信。 • CFNetwork 是基于 CFSocket 等接口的上层封装,ASIHttpRequest 工作于这一层。 • NSURLConnection 是基于 CFNetwork 的更高层的封装,提供面向对象的接口,AFNetworking 工作于这一层。 • NSURLSession 是 iOS7 中新增的接口,表面上是和 NSURLConnection 并列的,但底层仍然用到了 NSURLConnection 的部分功能 (比如 com.apple.NSURLConnectionLoader 线程),AFNetworking2 和 Alamofire 工作于这一层。 下面主要介绍下 NSURLConnection 的工作过程。 通常使用 NSURLConnection 时,你会传入一个 Delegate,当调用了 [connection start] 后,这个

Crash at _CFAutoreleasePoolPop

江枫思渺然 提交于 2019-12-13 07:32:17
问题 I got a crash from Fabric ,the stack is below: Thread : Crashed: com.apple.main-thread 0 libobjc.A.dylib 6806634868 objc_release + 20 1 libsystem_blocks.dylib 6813456656 _Block_release + 256 2 libobjc.A.dylib 6806640420 (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 564 3 CoreFoundation 6529519172 _CFAutoreleasePoolPop + 28 4 UIKit 6605817924 _wrapRunLoopWithAutoreleasePoolHandler + 76 5 CoreFoundation 6530394704 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32 6