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];
}
しかし、私の要件は、両方の nsoperation を作成できるように、さまざまな関数で nstimer を使用する必要があることです。以下のコードは、最初の関数のみを呼び出します。
-(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];
}
私は自分の質問に対する答えを見つけました。他の人にも伝えるべきだと思いました。解決策は、関数ごとに異なるスレッドを使用する必要があったことです。
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];