我有一个块对象,它被转换为void *
指针以传递给 C 库。我正在部署到 OS X 10.6,所以CFBridgingRetain
不可CFBridgingRelease
用。
相反,我正在做:
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
吗?