Я пытаюсь выполнить блок через асинхронную очередь отправки в 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);
}
}
Я получаю EXC_BAD_ACCESS в методе dispatchEventToSubscribeers. Когда я проверяю, что является значением _dude
, XCode сообщает, что оно выходит за рамки. Я могу только предположить, что я как-то теряю this
. Проверка документов на параллелизм:
Для блоков, которые вы планируете выполнить
асинхронно с использованием очереди отправки,
безопасно захватывать скалярные переменные
из родительской функции или метода и
использовать их в блоке. Тем не менее, вы
не следует пытаться захватить большое
структуры или другие указатели на основе
переменные, которые выделяются и
удалено контекстом вызова. Посредством
время выполнения вашего блока
память, на которую ссылается этот указатель, может
уйти Конечно, это безопасно
выделить память (или объект)
себя и явно раздай
владение этой памятью для блока.
Так как я могу асинхронно отправлять метод для this
объекта?
Спасибо!