我正在尝试通过 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
对象上异步调度方法呢?
谢谢!