2015-06-15 15 views
6

Tôi đã thiết kế một ứng dụng sử dụng NSURLSession và suy nghĩ về việc đưa nó vào một chủ đề khác với Grand Central Dispatch, nhưng nếu NSURLSession tự động làm điều đó trong nền, tôi sẽ không phải sử dụng GCD sau đó, đúng không?NSURLSession có diễn ra trong một chuỗi riêng biệt không?

Nói cách khác, NSURLSession có tự động sử dụng Grand Central Dispatch ở chế độ nền, vì vậy chúng tôi không phải lo lắng về điều đó?

Trả lời

14

Có,

NSURLSession hoạt động trong chuỗi nền. Tải xuống ALWAYS diễn ra trên một chuỗi nền.

Bạn có thể kiểm soát xem các phương thức hoàn thành của nó có được thực thi trên một chuỗi nền hay không bằng hàng đợi bạn chuyển vào tham số delegateQueue cho phương thức init. Nếu bạn vượt qua trong nil, nó tạo ra một hàng đợi hoạt động nối tiếp (chủ đề nền), nơi các phương thức hoàn thành của bạn được gọi. Nếu bạn vượt qua trong NSOperationQueue.mainQueue() thì phương thức ủy nhiệm hoàn thành của bạn sẽ được gọi trên chuỗi chính và bạn sẽ không phải bao bọc các cuộc gọi giao diện người dùng trong các cuộc gọi dispatch_async() tới chuỗi chính.

3

Dưới đây là một ví dụ về một yêu cầu NSURLSession:

[[session dataTaskWithURL:[NSURL URLWithString:someURL] 
     completionHandler:^(NSData *data, 
          NSURLResponse *response, 
          NSError *error) { 
     // handle response 

    }] resume]; 

Từ Tài liệu: "Phương pháp này được dự định như là một thay thế cho các sendAsynchronousRequest: đợi: completionHandler: phương pháp NSURLConnection, với khả năng bổ sung để hỗ trợ tùy chỉnh xác thực và hủy bỏ. " Câu trả lời ngắn gọn là: có, NSURLSession sẽ thực hiện các thao tác nền. Bạn không phải lo lắng về việc chặn giao diện người dùng của mình.

+0

Câu trả lời của bạn về NSURLConnection không được chấp nhận. Nhưng câu hỏi là về NSURLSession. – Fogmeister

+0

Cập nhật câu trả lời của tôi cho NSURLSession – erparker

+0

Hoạt động nền là một điều khác. 'NSURLSession' luôn sử dụng chuỗi nền để chuyển dữ liệu của bạn từ thiết bị từ xa. Khi các tài liệu về 'NSURLSession' nói về nền, họ đang nói về việc việc tải xuống/dữ liệu của bạn tiếp tục ngay cả khi ứng dụng của bạn ở chế độ nền, bị tạm dừng hoặc thậm chí bị chấm dứt. –

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