อ่านผลลัพธ์พร็อกซีของ CFNetwork โดยตรงใน C++
ใช้ API ค้นหาพร็อกซีภาษา C ของ Apple จาก C++ และคงค่าของดิกชันนารีที่ยืมมาให้มีชีวิตอยู่โดยไม่ปล่อยเป็นออบเจ็กต์ที่ครอบครอง
การค้นหาพร็อกซีของ CFNetwork เป็น C API ที่ใช้ได้โดยตรงจาก C++ การแปลงทุกอย่างเป็นออบเจ็กต์ 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