Objective-C++の非同期ディスパッチキューを介してブロックを実行しようとしています。これが私がやろうとしていることのクラスフラグメントです...
class Blah {
public:
void dispatch(const EventPtr& event) {
dispatch_queue_t queue = dispatch_queue_create(_queueName.c_str(), NULL);
dispatch_async(queue, ^{
this->dispatchEventToSubscribers(event);
});
dispatch_release(queue);
}
protected:
Dude _dude;
void dispatchEventToSubscribers(const EventPtr& event) {
_dude.dispatchToSubscribers(event);
}
}
dispatchEventToSubscribersメソッド内でEXC_BAD_ACCESSを取得します。の値を確認する_dude
と、XCodeは範囲外であると通知します。this
どういうわけか負けているとしか思えない。同時実行ドキュメントの確認:
ディスパッチキューを使用して非同期で実行する予定のブロックの場合、親関数またはメソッドからスカラー変数をキャプチャして、ブロックで使用するのが安全です。ただし、呼び出し元のコンテキストによって割り当ておよび削除される大きな構造体やその他のポインターベースの変数をキャプチャしようとしないでください。ブロックが実行されるまでに、そのポインタによって参照されているメモリがなくなっている可能性があります。もちろん、自分でメモリ(またはオブジェクト)を割り当て、そのメモリの所有権をブロックに明示的に渡すことは安全です。
this
では、オブジェクトにメソッドを非同期的にディスパッチするにはどうすればよいですか?
ありがとう!