gpt4 book ai didi

ios - 我的 NSTimer 的选择器没有运行。为什么?

转载 作者:可可西里 更新时间:2023-11-01 06:18:12 24 4
gpt4 key购买 nike

我的代码是:

-(void) timerRun{...}

-(void) createTimer
{
NSTimer *timer;
timer = [NSTimer timerWithTimeInterval:1.0
target:self
selector:@selector(timerRun)
userInfo:nil
repeats:YES];
}

viewDidLoad
{
[NSThread detachNewThreadSelector:@selector(createTimmer)
toTarget:self withObject:nil];
...

}

当我调试时,方法createTimer 运行正常,但是方法timerRun 没有运行?

最佳答案

只是创建一个计时器并不会启动它运行。您需要创建它并安排它。

如果您想让它在后台线程上运行,您实际上将不得不做比这稍微多一些的工作。 NSTimer 附加到 NSRunloop,它们是事件循环的 Cocoa 形式。每个 NSThread 本身都有一个运行循环,但您必须明确告诉它运行。

附加了计时器的运行循环可以无限期地自行运行,但您可能不希望它这样做,因为它不会为您管理自动释放池。

因此,总而言之,您可能想要 (i) 创建计时器; (ii) 将其附加到该线程的运行循环; (iii) 进入一个创建自动释放池的循环,运行运行循环一段时间,然后清空自动释放池。

代码可能如下所示:

// create timer
timer = [NSTimer timerWithTimeInterval:1.0
target:self
selector:@selector(timerRun)
userInfo:nil
repeats:YES];

// attach the timer to this thread's run loop
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

// pump the run loop until someone tells us to stop
while(!someQuitCondition)
{
// create a autorelease pool
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

// allow the run loop to run for, arbitrarily, 2 seconds
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:2.0]];

// drain the pool
[pool drain];
}

// clean up after the timer
[timer invalidate];

关于ios - 我的 NSTimer 的选择器没有运行。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8184081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com