2
我有一個塊對象被轉換爲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
結束時釋放塊的正確方法嗎?