比如,定義一個NSTimer來隔一會調用某個方法,但這時你在拖動textVIew不放手,主線程就被占用了。timer的監聽方法就不調用,直到你鬆手,這時把timer加到 runloop里,就相當於告訴主迴圈騰出點時間來給timer,再拖動textView就不會因主線程被占用而不調用了。 改為: ...
比如,定義一個NSTimer來隔一會調用某個方法,但這時你在拖動textVIew不放手,主線程就被占用了。timer的監聽方法就不調用,直到你鬆手,這時把timer加到 runloop里,就相當於告訴主迴圈騰出點時間來給timer,再拖動textView就不會因主線程被占用而不調用了。
NSTimer *timer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(run) userInfo:nil repeats:YES]; // 定時器只運行在NSDefaultRunLoopMode下,一旦RunLoop進入其他模式,這個定時器就不會工作 [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
改為:
// 定時器會跑在標記為common modes的模式下 // 標記為common modes的模式:UITrackingRunLoopMode和kCFRunLoopDefaultMode [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];