Läs CFNetwork-proxyresultat direkt i C++
Använd Apples C-API:er för proxyuppslag från C++ och håll lånade ordboksvärden vid liv utan att frigöra dem som ägda objekt.
CFNetwork:s proxyuppslag är ett C-API som kan användas direkt från C++; att konvertera allt till Objective-C-objekt är valfritt. Anropa CFNetworkCopyProxiesForURL med mål-CFURL:en och inställningar från CFNetworkCopySystemProxySettings för att få ordnade proxyordböcker.
| Värde | Ägande |
|---|---|
| Objekt som skapas eller returneras av Copy, inklusive rutter och inställningar | Ägs av anroparen; frigör varje ägt objekt som inte är null |
| Ordbok från arrayen eller värdnamn från ordboken via Get | Lånat; frigör inte utan att ha behållit det |
För giltiga routes och ett index inom intervallet kan uttaget se ut så här:
CFDictionaryRef proxy = static_cast<CFDictionaryRef>(
CFArrayGetValueAtIndex(routes, index));
CFStringRef hostname = static_cast<CFStringRef>(
CFDictionaryGetValue(proxy, kCFProxyHostNameKey));
Läs kCFProxyTypeKey innan du behandlar posten som en slutpunkt. Direkta och automatiskt konfigurerade kandidater kräver olika hantering.
Konvertera en konkret posts CFString-värdnamn och CFNumber-port medan ägaren är vid liv. Uttagna C++-värden kan sedan gå in i transportens konfiguration. För att behålla själva CFString bortom resultatet, behåll det först och balansera det senare med CFRelease; annars avsluta innan du frigör ägaren som innehåller det.
Frigör den skapade/kopierade mål-URL:en, inställningsordboken och resultatarrayen vid städning, och använd en scope guard om det passar. En variabels CFStringRef-typ ensam ger inte ägande över ett Get-resultat.