现在的位置: 首页 > 综合 > 正文

iphone——使用run loop对象

2013年10月21日 ⁄ 综合 ⁄ 共 1780字 ⁄ 字号 评论关闭

转自:http://blog.csdn.net/lingedeng/article/details/6870692

如果你在非main
thread中运行run loop,你必须至少为该run loop添加一个input sources或timer。如果你运行的run loop没有监控任何的输入源,该run loop将在你运行后立即退出。

Run
loop observer

        使用detachNewThreadSelector:toTarget:withObject:创建一个thread:

  1. [NSThread detachNewThreadSelector:@selector(observerRunLoop) toTarget:self withObject:nil];  


        在新thread的run
loop中添加observer:

  1. - (void)observerRunLoop {  
  2.     //建立自动释放池  
  3.     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];  
  4.       
  5.     //获得当前thread的Run loop  
  6.     NSRunLoop *myRunLoop = [NSRunLoop currentRunLoop];  
  7.       
  8.     //设置Run loop observer的运行环境  
  9.     CFRunLoopObserverContext context = {0, self, NULL, NULL, NULL};  
  10.       
  11.     //创建Run loop observer对象  
  12.     //第一个参数用于分配observer对象的内存  
  13.     //第二个参数用以设置observer所要关注的事件,详见回调函数myRunLoopObserver中注释  
  14.     //第三个参数用于标识该observer是在第一次进入run loop时执行还是每次进入run loop处理时均执行  
  15.     //第四个参数用于设置该observer的优先级  
  16.     //第五个参数用于设置该observer的回调函数  
  17.     //第六个参数用于设置该observer的运行环境  
  18.     CFRunLoopObserverRef observer = CFRunLoopObserverCreate(kCFAllocatorDefault, kCFRunLoopAllActivities, YES, 0, &myRunLoopObserver, &context);  
  19.       
  20.       
  21.     if (observer) {  
  22.         //将Cocoa的NSRunLoop类型转换成Core Foundation的CFRunLoopRef类型  
  23.         CFRunLoopRef cfRunLoop = [myRunLoop getCFRunLoop];  
  24.         //将新建的observer加入到当前thread的run loop  
  25.         CFRunLoopAddObserver(cfRunLoop, observer, kCFRunLoopDefaultMode);  
  26.     }  
  27.       
  28.     //Creates and returns a new NSTimer object and schedules it on the current run loop in the default mode  
  29.     [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(doFireTimer:) userInfo:nil repeats:YES];  
  30.       
  31.     NSInteger loopCount = 10;  
  32.       
  33.     do {  
  34.         //启动当前thread的loop直到所指定的时间到达,在loop运行时,run loop会处理所有来自与该run loop联系的input source的数据  

抱歉!评论已关闭.