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

 

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.