iOS 내부에는 NS Object와 함께 CF Object로 이루어진(based) framework가 존재합니다.
xcode 4 이후 ARC가 적용되면서 이 두 object간 값을 bridge하는 __bridge 전처리기가 사용되는데 이 두 object간의 변환 방법입니다.
CFTypeRef inTypeRef = (__bridge CFTypeRef)result; OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)baseInformation, &inTypeRef); if (status == errSecSuccess) { result = (__bridge_transfer NSData *)inTypeRef; password = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding]; }
위 예제는 Security.framework를 이용하여 Keychain에 저장된 값을 가져오는 예제입니다.
SecItemCopyMatching(CFDictionaryRef query, CFTypeRef *result) 함수의 두 번째 인자는 포인트를 가지는 CFTypeRef인데
이 값을 NSData로 옮기는 과정에서 위에서 설명한 변환법을 볼 수 있습니다.
즉, __bridge_transfer (NS Object)CG Object를 이용하여 옮긴 것입니다.