【发布时间】:2012-11-29 06:35:40
【问题描述】:
当我像这样使用 ns 计时器时,它会同时调用 foo1 和 foo1
-(void)register1
{
NSRunLoop * runLoop = [NSRunLoop currentRunLoop];
[runLoop addTimer:[NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(foo) userInfo:nil repeats:YES] forMode:NSDefaultRunLoopMode];
[runLoop addTimer:[NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(foo2) userInfo:nil repeats:YES] forMode:NSDefaultRunLoopMode];
[runLoop run];
}
但我的要求是我必须在不同的函数中使用 nstimer,以便我可以创建两者的 nsoperation。下面的代码只调用第一个函数。即,当我从 main 调用 register1 和 register2 时,只注册了一个计时器。第一名
-(void)register1
{
NSRunLoop * runLoop = [NSRunLoop currentRunLoop];
[runLoop addTimer:[NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(foo) userInfo:nil repeats:YES] forMode:NSDefaultRunLoopMode];
[runLoop run];
}
-(void)register2
{
NSRunLoop * runLoop = [NSRunLoop currentRunLoop];
[runLoop addTimer:[NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(foo2) userInfo:nil repeats:YES] forMode:NSDefaultRunLoopMode];
[runLoop run];
}
我已经找到了我的问题的答案,我想我也应该告诉其他人。解决方案是我必须为每个函数使用不同的线程。我以这种方式在 main 中使用了 nsoperation
abc *ab=[[abc alloc]init];
//[ab register1];
// [ab register2];
NSOperationQueue *queue=[[NSOperationQueue alloc]init];
NSInvocationOperation *abc=[[NSInvocationOperation alloc]initWithTarget:ab selector:@selector(register1) object:(nil)];
NSInvocationOperation *abc2=[[NSInvocationOperation alloc]initWithTarget:ab selector:@selector(register2) object:(nil)];
[queue addOperation:abc];
[queue addOperation:abc2];
【问题讨论】:
-
你试过扩大runLoop的范围吗?我担心它会在你用完之前被处理掉。
标签: objective-c nstimer nsoperation