포인터형 CF Object를 NS Object로 bridge 하기

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를 이용하여 옮긴 것입니다.

 

0 Shares:
답글 남기기

이메일 주소는 공개되지 않습니다.

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.

You May Also Like