Yêu cầu không đồng bộ được lên lịch trên vòng lặp chạy và thiết lập dưới dạng nguồn vòng lặp chạy, chỉ kích hoạt mã tự động khi có dữ liệu nhận được từ mạng (như bất kỳ nguồn socket nào).
Yêu cầu đồng bộ chạy trên NSThread
độc quyền một chuỗi để giám sát dữ liệu đến, nói chung là quá mức cần thiết.
Bạn luôn có thể hủy NSURLConnection
ngay cả khi nó đã được thực hiện không đồng bộ, sử dụng phương thức cancel
.
Tôi đặt cược bằng cách sử dụng API mới cho phép gửi một yêu cầu không đồng bộ trên một NSOperationQueue
(+sendAsynchronousRequest:queue:completionHandler:
) sử dụng GCD dưới mui xe và dispatch_source_create
, hoặc một cái gì đó tương tự, để nó hành xử theo cách tương tự như khi một NSURLConnection
được lên kế hoạch trên chạy vòng lặp, tránh sử dụng một chuỗi bổ sung (xem các video WWDC'12 giải thích tại sao luồng là ác và cách sử dụng của chúng sẽ được giảm thiểu), sự khác biệt chỉ là cho phép bạn sử dụng một khối để được thông báo sau khi hoàn thành thay vì sử dụng các đại biểu cơ chế.
Một số năm trước, tôi đã tạo một lớp nhúng NSURLConnection
cuộc gọi không đồng bộ và quản lý ủy quyền vào API khối đẹp (xem OHURLLoader trên github của tôi) giúp bạn sử dụng dễ dàng hơn (cảm thấy tự do để xem). Tôi đặt cược API mới sử dụng NSOperationQueue
s sử dụng nguyên tắc tương tự, vẫn thực hiện yêu cầu không đồng bộ trên runloop nhưng cho phép bạn sử dụng các khối thay vì phải triển khai đại biểu.
Cảm ơn, bạn có một điểm :) – msk
Điều đó có ý nghĩa. * Là gì * cách tiếp cận dựa trên khối mới, cụ thể là xin vui lòng? Không tìm kiếm mã, chỉ cần hỏi Google để tôi có thể tìm kiếm một số tài liệu. – Madbreaks
@ Phá vỡ nó là 'NSURLConnection + sendAsynchronousRequest: queue: completionHandler:'. – Tommy