ios NSTimer只执行一次甚至不执行问题

今天发现一个问题,在一个按钮的点击方法中添加NSTimer,发现不会自动执行。。。

找了好久没有找到原因,但是发现一个方法可以调用,直接代码



- (IBAction)clickStarAnimation:(id)sender {     

[self.timer fire];

}

-(void)prossAdd{

   static CGFloat end = 0.25f;    //设置黄色圆环开始滚动弧度为1/4

    end += 0.01f;

    [self.proView drawProgress:end];  

  if (end >= 1) {        

[self stopTimer];  

  }

}

-(NSTimer *)addTimer{  

  if (!_timer) {  

      __weak typeof(self) weakSelf = self;      

  _timer = [NSTimer timerWithTimeInterval: 0.1f    repeats: YES block:^(NSTimer * _Nonnull timer

{                                                // 调用这个方法, 来确定是否需要刷新数据                                                [weakSelf prossAdd ];                                         

  }];    


[[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];

}

    return _timer;

}

这种写法发现并不执行。。。。

经过测试发现这样写能正常执行代码(怀疑是线程问题)


- (IBAction)clickStarAnimation:(id)sender {       

  [self startTimer];

}

-(void)prossAdd {   

static CGFloat end = 0.25f;     //设置黄色圆环开始滚动弧度为1/4  

  end += 0.01f;

    [self.proView drawProgress:end];  

  if (end >= 1) {      

  [self stopTimer];  

  }

}

- (void)startTimer{  

  //为了保证UI刷新在主线程中完成。

    [self performSelectorOnMainThread:@selector(startTimeroOnMainThread) withObject:nil waitUntilDone:NO];

}

#pragma -mark 初始化定时器

- (void)startTimeroOnMainThread{    

if (!_timer) {         _timer = [NSTimer scheduledTimerWithTimeInterval:1.0/3 target:self selector:@selector(prossAdd) userInfo:nil repeats:YES];         [[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];     }

}

这样定时器就正常执行了

你可能感兴趣的:(ios NSTimer只执行一次甚至不执行问题)