CFNetwork의 프록시 조회는 C++에서 곧바로 쓸 수 있는 C API이며, 모든 것을 Objective-C 객체로 바꾸는 일은 선택 사항입니다. CFNetworkCopyProxiesForURL를 대상 CFURL과 CFNetworkCopySystemProxySettings의 설정과 함께 호출하면 정렬된 프록시 딕셔너리를 얻습니다.

값소유권
Copy가 만들거나 반환한 객체(경로와 설정 포함)호출자가 소유합니다. null이 아닌 소유 객체는 각각 해제하십시오
배열에서 얻은 딕셔너리 또는 Get을 통해 딕셔너리에서 얻은 호스트 이름빌려온 값입니다. 유지하지 않았다면 해제하지 마십시오

유효한 routes와 범위 안의 인덱스라면 추출은 다음과 같습니다.

CFDictionaryRef proxy = static_cast<CFDictionaryRef>(
    CFArrayGetValueAtIndex(routes, index));
CFStringRef hostname = static_cast<CFStringRef>(
    CFDictionaryGetValue(proxy, kCFProxyHostNameKey));

항목을 엔드포인트로 다루기 전에 kCFProxyTypeKey를 읽으십시오. 직접 후보와 자동 구성 후보는 서로 다르게 처리해야 합니다.

소유자가 살아 있는 동안 특정 항목의 CFString 호스트 이름과 CFNumber 포트를 변환하십시오. 추출한 C++ 값은 그다음 전송 계층 구성으로 넘길 수 있습니다. 결과 이후에도 CFString 자체를 유지하려면 먼저 유지하고 나중에 CFRelease로 균형을 맞추십시오. 그렇지 않다면 그것을 담은 소유자를 해제하기 전에 작업을 마치십시오.

정리 단계에서 생성/복사한 대상 URL, 설정 딕셔너리, 결과 배열을 해제하고 필요하면 스코프 가드를 사용하십시오. 변수의 CFStringRef 타입만으로는 Get 결과에 대한 소유권이 생기지 않습니다.

관련 글