본문 바로가기

프로그래밍

__bridge, __bridge_retained, __bridge_transfer

NS 타입과 CF 타입간의 형 변환

 

 __bridge

(__bridge T) op

op를 T타입으로 브릿지 캐스팅할 때 사용

 

 

● __bridge_retained (혹은 CFBridgingRetain())

(__bridge_retained T) op 

NSType 포인터(op)를 CFType 포인터(T)로 바꿀 때 사용

 

NSArray *array = [[NSArray alloc] init];
CFArrayRef cfArray = (__bridge_retained CFArrayRef)array;

위 코드 블럭은 아래와 동일하다.

NSArray *array = [[NSArray alloc] init];
CFArrayRef cfArray = (CFArrayRef)CFBridgingRetain(array);

 

 __bridge_transfer (혹은 CFBridgingRelease())

(__bridge_transfer T) op

CFType 포인터(op)를 NSType 포인터(T)으로 바꿀 때 사용

 

CFArrayRef cfArray = CFArrayCreate(...);
NSArray *array = (__bridge_transfer NSArray *)cfArray;

위 코드 블럭은 아래와 동일하다

CFArrayRef cfArray = CFArrayCreate(...);
NSArray *array = (NSArray *)CFBridgingRelease(cfArray);

 

타입 캐스팅을 통한 ARC에 대한 부분은 아래 링크에 자세하게 나와 있으니 추가로 읽어보면 좋을 것 같다.

참고 링크 : http://seorenn.blogspot.com/2015/01/objective-c-arc.html

 

[Objective-C] ARC - 브릿지 이야기

iOS 및 macOS 용 앱 개발, Emacs, Vim, Python 위주로 다루는 Seorenn 개인 블로그

seorenn.blogspot.com