2011-03-04 25 views
7

Tôi đang sử dụng một phiên bản của NSURLConnection trên iPhone để yêu cầu dữ liệu từ một máy chủ, được quản lý bởi một đại biểu như bình thường. Các yêu cầu là khá thường xuyên (có thể một lần mỗi 2 phút nói) và có một URL phổ biến và cố định. Thay vì nhìn thấy trường hợp tốt của NSURLConnection được phát hành sau mỗi lần tải xuống và sau đó một bản mới được tạo ra:Sử dụng lại một phiên bản của NSURLConnection

  1. Có bất kỳ giá trị nào trong việc duy trì kết nối đầu tiên và sử dụng lại nó không? (Tôi hy vọng như vậy, một xác thực tốt sẽ đáng giá một nghìn.)

  2. Nếu vậy, làm cách nào để tôi sử dụng lại nó? Phương pháp nổi bật trong tài liệu là -start nhưng điều này dường như làm hỏng ứng dụng khi được gọi trên một phiên bản đã được sử dụng (và không phải là nil) của NSURLConnection. [Các tài liệu làm nói -start "làm cho người nhận để bắt đầu nạp dữ liệu, nếu nó không có đã"]

Trong trường hợp đó là sự giúp đỡ liên quan đến các câu hỏi trên với, Tôi (đã) đề xuất:

if (connection_ == nil) 
    { 
    connection_ = [NSURLConnection connectionWithRequest:request 
               delegate:self]; 
    } 
    else 
    { 
    [connection_ start]; 
    } 
+0

Câu hỏi thú vị ... :) – Jasarien

+0

Đây là một bản sao nhỏ, xem http://stackoverflow.com/questions/886810/nsurlconnection-is-run-many-times. Vẫn không có câu trả lời tốt mặc dù. Có vẻ như bạn cần phải pha trộn lớp của riêng mình cho nhiệm vụ này. – SK9

+0

Có vẻ như một trong những câu trả lời cho câu hỏi đó là gợi ý luồng HTTP thay vì kết nối sử dụng một lần. Giữ một dòng mở và chỉ sử dụng nó mỗi 2 phút sẽ không là một ý tưởng tuyệt vời. Tôi không thực sự thấy một vấn đề với việc phát hành và tái tạo đối tượng kết nối. Đây có phải là một tối ưu hóa trước không? – Jasarien

Trả lời

3

Tài liệu dường như cho biết rằng kết nối URL vẫn giữ quyền đại biểu (không cần thiết, nhưng cần thiết trong trường hợp này) và sau đó phát hành khi kết nối tải xong, không thành công hoặc bị hủy.

Sự cố là đại biểu không phải là thuộc tính có thể đặt trên NSURLConnection và do đó bạn không thể đặt lại sau khi được phát hành. Điều này khá nhiều làm cho kết nối URL vô ích sau khi nó đã chạy một lần, đòi hỏi bạn phải phát hành và tạo lại nó nếu bạn muốn làm điều đó một lần nữa.

+0

@J: Đây là những gì tôi thu thập được. Tôi không biết về các lựa chọn thay thế cho NSURLConnection ở đây, có thể ASI [http://allseeing-i.com/ASIHTTPRequest/], v.v ...? – SK9

+0

Tôi không sử dụng 'AIHTTPRequest', nhưng tôi tin rằng nó được xây dựng dựa trên 'NSURLConnection' vì vậy ngay cả khi bạn có thể tái sử dụng một thể hiện của một trong số đó, nó vẫn sẽ phát hành và tái tạo kết nối url bên dưới nắp. – Jasarien

+0

@J: Có thể tạo NSURLConnection được xác thực trước và trì hoãn thực hiện yêu cầu không? (ví dụ: nạp súng, bắn khi sẵn sàng.) – SK9

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