これが私のシナリオです....
Note On および Note Off メッセージを検出する Core MIDI アプリがうまく機能しています。
メッセージをコントローラに送り返して LED を点灯させる midiSend メソッドがいくつかありますが、これも正常に動作しています。
私が今やりたいことは、ノートオフメッセージで LED を点滅させたり消したりすることです。これは私のコードです:
[midiListener performSelectorOnMainThread:@selector(startTimer:) withObject:midiMsgParts waitUntilDone:YES];
-(void)startTimer:(NSDictionary *)dict {
ledIntervalCount = 0;
ledIntervalTimer = [NSTimer scheduledTimerWithTimeInterval:0.3
                                                    target:self
                                                  selector:@selector(ledIntervalLoop:)
                                                  userInfo:dict
                                                   repeats:YES];
}
-(void)ledIntervalLoop:(NSTimer *)inboundTimer{
NSDictionary *userInfo = [NSDictionary dictionaryWithDictionary:[inboundTimer userInfo]];
NSLog(@"%@", userInfo);
UInt32 onCommand = [[userInfo objectForKey:@"noteOn"] intValue];
//UInt32 offCommand = [[userInfo objectForKey:@"noteOff"] intValue];
UInt32 theNote = [[userInfo objectForKey:@"note"] intValue];
ledIntervalCount++;
if (ledIntervalCount > 3) {
    [ledIntervalTimer invalidate];
    ledIntervalTimer = nil;
} else {
    if(ledIntervalCount %2){
        [self sendNoteOnIlluminate:onCommand midiNote:theNote];
    }else{
        [self sendNoteOnCommand:onCommand midiNote:theNote];
    }
  }
}
NSTimerそのため、LED のオン/オフ コマンドを交互に使用しています。1 つのボタンを押すと正常に機能しますが、同時に複数のボタンを押すと機能しません。startTimer メソッドへの最後の呼び出しのみを選択するようです。
ここで、GCD でディスパッチ キューを実装する必要があると思います。NSTimerそのため、後続のメソッド呼び出しによって中断されることなく、それぞれが完全に実行されます。
私は正しいですか?GCD ではNSTimer同時に実行できますか?
GCD は私にとって新しい概念なので、実装方法についてのガイダンスが役立ちます。いくつかのリファレンス ガイドを読みましたが、シナリオのコンテキストでサンプル コードを確認する必要があります。ここで私が求めているのは、私のコードのどの部分がブロックに入るでしょうか?