Đọc kết quả proxy của CFNetwork trực tiếp trong C++
Dùng các API tra cứu proxy bằng C của Apple từ C++ và giữ cho các giá trị từ điển vay mượn còn sống mà không giải phóng chúng như đối tượng sở hữu.
Tra cứu proxy của CFNetwork là một C API dùng trực tiếp được từ C++; việc chuyển mọi thứ thành đối tượng Objective-C là tùy chọn. Gọi CFNetworkCopyProxiesForURL với CFURL đích và các cài đặt từ CFNetworkCopySystemProxySettings để nhận các từ điển proxy đã được sắp xếp.
| Giá trị | Quyền sở hữu |
|---|---|
| Đối tượng do Copy tạo hoặc trả về, bao gồm tuyến và cài đặt | Do bên gọi sở hữu; giải phóng từng đối tượng sở hữu khác null |
| Từ điển lấy từ mảng hoặc tên máy chủ lấy từ từ điển qua Get | Vay mượn; không giải phóng nếu chưa giữ lại |
Với routes hợp lệ và chỉ mục trong phạm vi, việc trích xuất có thể là:
CFDictionaryRef proxy = static_cast<CFDictionaryRef>(
CFArrayGetValueAtIndex(routes, index));
CFStringRef hostname = static_cast<CFStringRef>(
CFDictionaryGetValue(proxy, kCFProxyHostNameKey));
Đọc kCFProxyTypeKey trước khi coi mục đó là điểm cuối. Ứng viên trực tiếp và ứng viên cấu hình tự động cần cách xử lý khác nhau.
Chuyển tên máy chủ CFString và cổng CFNumber của một mục cụ thể trong khi chủ sở hữu còn sống. Các giá trị C++ trích xuất sau đó có thể đi vào cấu hình của bộ truyền. Để giữ chính CFString sau khi có kết quả, hãy giữ nó trước rồi cân bằng lại bằng CFRelease; nếu không, hãy hoàn tất trước khi giải phóng chủ sở hữu chứa nó.
Khi dọn dẹp, giải phóng URL đích đã tạo/sao chép, từ điển cài đặt và mảng kết quả, dùng scope guard nếu phù hợp. Chỉ riêng kiểu CFStringRef của một biến không trao quyền sở hữu đối với kết quả Get.