

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

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

swiftからは

[code]

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

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

[code]

            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];
    
[/code]

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

[code]

      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
                }
    
            // 処理
            })
    
        }
    
[/code]

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

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


CC BY-SA 3.0
2016-04-22T10:18:33.700
24258
2016-04-22T11:21:42.463
2016-04-22T11:21:42.463
13972
12842
question
swift
dispatch_async内での参照について