У меня есть объект блока, который преобразован в указатель void *
, чтобы перейти в библиотеку C. Я развертываю OS X 10.6, поэтому CFBridgingRetain
и CFBridgingRelease
недоступны.OS X: Как правильно установить указатель на выпуск с __bridge_transfer
Вместо этого я делаю:
void ptr_retain(void (^block)()) {
void *ptr = (__bridge_retained void *)(block);
...
// pass ptr to C lib
}
void ptr_release(const void *ptr) {
// C lib calls this function
void (^block)() = (__bridge_transfer void(^)())ptr;
}
Вопрос: В ptr_release я получаю "неиспользованными переменную" предупреждение. Я обеспокоен тем, что компилятор может оптимизировать линию __bridge_transfer
, и блок никогда не будет выпущен. Может ли это случиться? Даже если это не так, это правильный способ сообщить ARC о выпуске блока в конце ptr_release
?