swift
C++クラスを動かすためのObje-C++
C++(拡張子はmm)

上記のクラスがある状態で、
swift→Obje-C++→C++→Obje-C++→swiftの流れで処理させようとしています。

swiftからは

   private var queue: dispatch_queue_t = dispatch_queue_create("test.test.testcall", DISPATCH_QUEUE_SERIAL)
   dispatch_async(queue, {
      // Obje-C++のクラスのメソッドを呼び出す
   })

C++の処理結果をObje-C++から下記のような形で通知を行い、

        NSData* info = [NSData dataWithBytes:(const void*)info length: sizeof(info)];
        NSDictionary *dictionary = @{@"info": info,
                              @"data1":[NSNumber numberWithInt: data1],
                              @"data2":[NSNumber numberWithInt: data2]};
        NSNotification *notification = [NSNotification notificationWithName: @"testNotification" object: nil userInfo: dictionary];
        [[NSNotificationCenter defaultCenter] postNotification: notification];

swift側で以下のような形で処理をしています。

  private var queue: dispatch_queue_t = dispatch_queue_create("test.test.test", DISPATCH_QUEUE_SERIAL)
   @objc private func testNotification(notification: NSNotification) {

        dispatch_async(queue, {
            guard let info = notification.userInfo?["info"] as? NSData else {
                return
            }
            guard let data1 = notification.userInfo?["data1"] as? NSNumber else {
                return
            }
            guard let data2 = notification.userInfo?["data2"] as? NSNumber else {
                return
            }

        // 処理
        })

    }

動いてはいるのですが、処理を繰り返すと、
最後のswiftの通知の受信箇所で取り出した中身が空だったりしてしまいます。

そこで、わからなくなってきてしまったのですが、testNotification()の
dispatch_async()内でパラメータnotificationを参照していますが、
これはtestNotification()で渡ってきた値のコピー?を参照している認識なのですがあっているのでしょうか・・・
testNotification()が複数回呼ばれた場合もキューにはそれぞれのnotificationのコピーが渡るので、正しく参照できる!
と考えているのですが、認識違いでしょうか。
dispatch_async(queue, {
/// ここで参照
})