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
끝에 블록을 해제하도록 알리는 올바른 방법입니까?