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使用的方法会自动将计时器添加到运行循环中。