{
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
})