2010-07-29 23 views
8

Tôi đang sử dụng NSURLConnection trong ứng dụng iPhone và giao diện dường như chậm lại sau khi gửi initWithRequest: đến phiên bản NSURLConnection của tôi. Tôi không chắc liệu điều này có xảy ra hay không vì mã xử lý của tôi mất nhiều thời gian để xử lý phản hồi hoặc nếu đó là vì NSURLConnection đang chặn luồng chính.NSURLConnection có chặn luồng chính không?

Bất cứ ai có thể xác nhận rằng NSURLConnection sẽ tạo kết nối và chờ dữ liệu trên một chuỗi riêng biệt, sau đó gọi phương thức ủy nhiệm của nó trên chuỗi chính không?

Cảm ơn!

Trả lời

10

NSURLConnection hỗ trợ hai phương thức hoạt động: không đồng bộ và đồng bộ. Không sử dụng chủ đề riêng biệt cả. Cả hai đều chỉ sử dụng một luồng, đó là bất kỳ chuỗi nào bạn chạy chúng.

Ở chế độ đồng bộ, NSURLConnection sẽ chặn bất kỳ chuỗi nào bạn chạy. Trong chế độ không đồng bộ sử dụng vòng lặp chạy để hành xử (từ góc độ của nhà phát triển) tương tự như một chủ đề nền nhưng với chi phí thấp hơn và không có bất kỳ vấn đề an toàn chủ đề nào. Nếu sử dụng chế độ không đồng bộ, bạn muốn chạy nó trong chuỗi chính. Nó sẽ không chặn bất cứ thứ gì.

Nếu giao diện của bạn bị chậm lại, điều đó không nhất quán với việc sử dụng NSURLConnection đồng bộ, thay vào đó sẽ làm cho giao diện của bạn dừng hoàn toàn cho đến khi yêu cầu hoàn tất.

+5

bạn cần phải cẩn thận với câu cuối cùng! nếu bạn có ví dụ 5000 yêu cầu nhỏ, trải nghiệm người dùng CÓ THỂ là giao diện đang chậm lại, (vì có rất nhiều điểm dừng nhỏ) mà gần đây tôi đã sử dụng – Tomen

+2

Sử dụng NSURLConnection không đồng bộ tạo chuỗi, một chuỗi nội bộ. Đó là định nghĩa không đồng bộ. – malhal

-1

Nếu bạn làm theo ví dụ táo trên NSURLConnection, cuộc gọi sẽ được xử lý trong một chuỗi khác với chuỗi chính.

Các vấn đề liên quan