[关闭]
@chenbinghua 2015-09-12T10:33:24.000000Z 字数 1372 阅读 1402

iOS开发之RunLoop简单介绍

iOS笔记


什么是RunLoop

RunLoop伪代码

  1. int main(int argc, char * argv[]) {
  2. NSLog(@"execute main function");
  3. return 0;
  4. }
  5. // 程序在第4行后直接结束
  1. int main(int argc, char * argv[]) {
  2. BOOL running = YES;
  3. while (running) {
  4. // 执行各种任务,处理各种事件
  5. // ......
  6. } ;
  7. return 0;
  8. }
  9. // 由于main函数里面启动了个RunLoop,所以程序并不会马上退出,保持持续运行状态,程序保持一种死循环的状态,除非破坏的循环条件,程序就会结束退出
  1. int main(int argc, char * argv[]) {
  2. @autoreleasepool {
  3. return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
  4. }
  5. }
  6. // UIApplicationMain函数内部就启动了一个RunLoop
  7. // 所以UIApplicationMain函数一直没有返回,保持了程序的持续运行
  8. // 这个默认启动的RunLoop是跟主线程相关联的

RunLoop对象

iOS中有2套API来访问和使用RunLoop

NSRunLoop和CFRunLoopRef都代表着RunLoop对象

NSRunLoop是基于CFRunLoopRef的一层OC包装,所以要了解RunLoop内部结构,需要多研究CFRunLoopRef层面的API(Core Foundation层面)

RunLoop与线程

获得RunLoop对象

  1. [NSRunLoop currentRunLoop]; // 获得当前线程的RunLoop对象
  2. [NSRunLoop mainRunLoop]; // 获得主线程的RunLoop对象
  1. CFRunLoopGetCurrent(); // 获得当前线程的RunLoop对象
  2. CFRunLoopGetMain(); // 获得主线程的RunLoop对象

RunLoop资料

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注