Ios NSTimer can';是否在NSThread函数中启动或运行?

Ios NSTimer can';是否在NSThread函数中启动或运行?,ios,objective-c,cocoa,Ios,Objective C,Cocoa,我想使用NSTimer每20秒运行一次函数,但我将NSTimer放在NSThread函数中。代码如下: -(void)func1 { [NSThread detachNewThreadSelector:@selector(func2) toTarget:self withObject:nil]; } -(void)func2 { [NSTimer scheduledTimerWithTimeInterval:3 target:s

我想使用
NSTimer
每20秒运行一次函数,但我将
NSTimer
放在
NSThread
函数中。代码如下:

-(void)func1
{
   [NSThread detachNewThreadSelector:@selector(func2)   
                         toTarget:self withObject:nil];
}
-(void)func2
{
   [NSTimer scheduledTimerWithTimeInterval:3 target:self          
    selector:@selector(func3) userInfo:nil repeats:YES];
}
-(void)func3
{
  //do something,but the function seems never be executed
}

所以问题是func2中的
NSTimer
永远不会执行func3。有人说
NSTimer
只在
主线程中运行。这是真的吗?所以不能
NSTimer
NSThread
函数中启动吗?

你可以通过

(void)addTimer:(NSTimer*)aTimer forMode:(NSString*)mode
编辑:


对您有用的链接:

您可以通过以下方式将计时器添加到当前线程的runloop

(void)addTimer:(NSTimer*)aTimer forMode:(NSString*)mode
编辑:


对您有用的链接:

在我看来,您的线程没有做任何事情。计时器计划作为线程运行循环的一部分进行检查。如果线程没有运行任何代码,那么它将不会通过其运行循环

这样想:

  • 起始线程
  • 开始线程运行循环
  • -func2
  • 末端运行回路
  • 睡眠线程
您已经在一个线程上安排了一个计时器,该线程在设置计时器后立即进入睡眠状态。无运行循环;没有定时器开火


更新


我的回答回答了这个问题,但没有给出答案。您希望达到的最终效果是什么?

在我看来,您的线程没有做任何事情。计时器计划作为线程运行循环的一部分进行检查。如果线程没有运行任何代码,那么它将不会通过其运行循环

这样想:

  • 起始线程
  • 开始线程运行循环
  • -func2
  • 末端运行回路
  • 睡眠线程
您已经在一个线程上安排了一个计时器,该线程在设置计时器后立即进入睡眠状态。无运行循环;没有定时器开火


更新


我的回答回答了这个问题,但没有给出答案。您希望达到的最终效果是什么?

@Thomasso您的意思是NSTimer可以在NSThread中设置并运行,而不仅仅是在主线程中?如果您有一个长时间运行的线程,那么您可以在其上设置计时器。长时间运行的线程就像是在后台下载数据的网络线程,或者是处理摄像头或麦克风输入的线程;线程主体是
func2
方法,该方法调度计时器,然后立即返回,线程随即退出。@Thomasso您的意思是NSTimer可以在NSThread中设置并运行,而不仅仅是在主线程中?如果您有一个长时间运行的线程,则可以在其上设置计时器。长时间运行的线程就像是在后台下载数据的网络线程,或者是处理摄像头或麦克风输入的线程;线程主体是
func2
方法,该方法调度计时器,然后立即返回,线程随即退出。1)相关线程没有设置运行循环。2) OP使用的方法会自动将计时器添加到运行循环。1)相关线程没有设置运行循环。2) OP使用的方法会自动将计时器添加到运行循环中。