2009-10-11 34 views
7

Điểm chính xác để phát hành đối tượng NSUrlConnection là gì?Khi nào phát hành đối tượng NSUrlConnection

Trong chương trình của tôi, tôi phân bổ một NSUrlConnection, và sau đó initWithRequest để khởi động không đồng bộ.

Tôi hiện chịu trách nhiệm giải phóng đối tượng - khi nào tôi/tôi có thể phát hành không? Ngay lập tức nếu tôi không sử dụng nó một lần nữa?

+0

Tôi đã kiểm tra số lần lưu giữ sau khi tạo NSUrlConnection của mình - nó là 2. Tôi cảm thấy rằng nó là chính xác để phát hành ngay lập tức. Bất cứ ai muốn mâu thuẫn với điều này, hoặc tạo ra một câu trả lời cho biết điều này? – Alan

Trả lời

7

Việc sử dụng NSUrlConnection của bạn có thể được phát hành ngay lập tức.

Khuôn khổ sẽ phát hành khi nó kết thúc với nó.

+1

Tôi nghĩ rằng nó không phải là một ý tưởng tốt. Tôi đã kiểm tra với mã của tôi, và sau đó nó có một vụ tai nạn. Và mã mẫu của Apple cũng không giải phóng nó. Họ phát hành nó trong cuộc gọi đại biểu, v.d. didFinishLoading ... – karim

10

Khi bạn đã hoàn tất với NSURLConnection. Bạn sẽ biết bạn đã hoàn thành khi số đại biểu của mình nhận được - (void)connectionDidFinishLoading:(NSURLConnection *)connection hoặc - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error. Chỉ cần phát hành nó ở phần cuối của hai phương pháp đó.

+0

Điều này khiến ứng dụng của tôi gặp sự cố với BAD_ACCESS. Tôi tin rằng bạn có thể phát hành nó ngay lập tức như @Alan nói. – Nathan

1

Bạn không cần phải phát hành nó cho đến khi khung công tác phát hành cho bạn thông báo hoàn thành, trong đó, ví dụ: connection:didFailWithError:.

1

Điều này hơi muộn (câu hỏi của bạn đã được đăng trong năm 2009, cách đây hơn một năm) nhưng tôi gặp sự cố với mã NSUrlConnection của mình. NSUrlConnection tiếp tục gặp sự cố và tôi cho rằng sự cố liên quan đến việc phát hành NSUrlConnection [theConnection release]; của tôi. Tôi đã viết mã của tôi như trong ví dụ của Apple here, nhưng tôi đã kết thúc việc phát hành kết nối sau khi nó được tạo trong "Liệt kê 1" thay vì phát hành nó ở nơi mà Apple thực hiện trong cả hai didFailWithErrorconnectionDidFinishLoading và dường như nó hoạt động tốt. Tôi không hoàn toàn chắc chắn, nhưng có lẽ cả hai đại biểu đó đã được gọi và một bản phát hành đôi là những gì đã gây ra vụ tai nạn. Tôi đã không chắc chắn tôi có thể phát hành đối tượng NSUrlConnection của tôi ngay sau khi nó được tạo ra cho đến khi tôi đọc câu hỏi này nhưng điều đó dường như làm các trick.

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