GCD,NSTimer等一些发现

{

   NSMutableArr *mutableArr;
}

- (void)viewDidload {

     mutableArr =[ [NSMutableArray alloc] init];

       for (int i =0; i<100; i++) {

            [mutableArraddObject:[NSStringstringWithFormat:@"%d",i]];

       }

      dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

          NSTimer *timer = [NSTimerscheduledTimerWithTimeInterval:3target:selfselector:@selector(methodOne)userInfo:nilrepeats:YES];

            [[NSRunLoopmainRunLoop]addTimer:timerforMode:NSDefaultRunLoopMode];

            [selfmethodTwo];   

        });
}


- (void)methodOne {
     [mutableArrremoveLastObject];
}


- (void)methodTwo {

    NSLog(@"%@",mutableArr);
}


试验发现methodOne不执行,而methodTwo是执行的,但是如果我们将上面红色字体涉及到的全局队列换成主线程

dispatch_get_main_queue()那么下面两个方法都试是执行的,只有methodone循环往复差不多100后,才会执行methodTwo,这是为什么呢,想不清了。

答案是:nstimer只有在主线程才会自动添加到runloop里面去,在其他线程需要主动添加

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIGRITY_DEFAULT,0),^{

 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector(methodOne) userInfo:nil repeats:YES];

         [NSRunloop currentRunloop] addTimer:timer Mode:NSDefaultRunloopMode];

       [ [NSRunloop currentRunloop] run];

切忌,这里我们不能将currentRunloop改成mainRunLoop

这两句代码就是主动将timer添加到runloop

})

你可能感兴趣的:(GCD,NSTimer等一些发现)