2010-05-29 31 views
21

Tôi hiện đang có UIWebView được hiển thị trong chế độ xem phương thức. Về cơ bản, đây là chế độ xem chi tiết cung cấp chế độ xem trang khi người dùng nhấp vào liên kết. Khi chế độ xem bị loại bỏ và sau đó được đưa lên lại (khi người dùng nhấp vào một liên kết khác), nội dung được tải trước đó vẫn hiển thị và nội dung mới tải "trên cùng" nội dung cuối cùng. Điều này có ý nghĩa bởi vì cá thể của UIWebView tồn tại giữa các phiên và chỉ được phát hành khi bộ nhớ là cần thiết.Xóa nội dung UIWebView khi loại bỏ chế độ xem phương thức (iPhone OS 3.0)

Tuy nhiên, tôi muốn xóa hoàn toàn UIWebView khi chế độ xem phương thức bị loại bỏ để 1) nội dung bị xóa và 2) bộ nhớ được giải phóng. Cho đến nay nghiên cứu và nỗ lực của tôi đã không tìm thấy câu trả lời. Các liên kết này chưa từng làm việc cho tôi:

  1. is it possible to free memory of UIWebView?
  2. Reused UIWebView showing previous loaded content for a brief second on iPhone

Tôi đã thử [[NSURLCache sharedURLCache] removeAllCachedResponses]; và thiết lập WebView để nil và tự phát hành WebView khi modal-view-sa thải hoặc không có avail. Bất kỳ suy nghĩ nào từ những khối lượng bị xáo trộn?

Trả lời

34

Phát hành chế độ xem web có lẽ là cách tiếp cận tốt nhất. Nếu một khung nhìn trong một hệ thống phân cấp khung nhìn (có một giám sát), bạn phải gọi removeFromSuperview để có được trình giám sát để giải phóng khung nhìn.

Bạn cũng có thể tải một chuỗi html cho một tài liệu rỗng:

[webView loadHTMLString:@"<html><head></head><body></body></html>" baseURL:nil]; 
65

Đôi khi loadHTMLString là quá chậm. Bạn cũng có thể sử dụng:

[webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML = \"\";"]; 

Tôi không chắc chắn nếu điều đó sẽ giải phóng nhiều bộ nhớ mặc dù ...

+2

Perfect! Có lẽ là giải pháp dễ nhất để xóa hình ảnh trực quan của chế độ xem web. Vẫn không hiểu tại sao loadHTMLString quá chậm. Có thể vì tôi đang tải trang khác ngay sau đó và chế độ xem web sẽ dừng tải và hiển thị trang trống khi trang bắt đầu tải trang mới. – Cray

+0

Giải pháp tốt nhất ở đây. Không biết tại sao đây không phải là câu trả lời bình chọn tốt nhất. Dù sao - Câu trả lời tuyệt vời !! – filou

+1

Điều tốt nhất về phương pháp này là phương thức ủy nhiệm webViewDidFinishLoad sẽ không được gọi! – user523234

14

Dường như dưới một số trường hợp các phương pháp được đề xuất bởi drawnonward và cướp có thể không hoạt động (có thể là một cái gì đó để làm với CSS trên các trang đang được xóa), tuy nhiên điều này đã làm công việc:

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]]; 
5

Trong trường hợp của tôi, tôi yêu cầu để xóa view web từ nội dung của nó ngay lập tức và có thể bắt đầu tải cái gì khác ngay lập tức. Không tải chuỗi HTML tài liệu trống cũng như không xóa trang có JavaScript dẫn đến hiệu quả mong muốn. Thay vào đó tôi đã sử dụng:

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]]; 
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://stackoverflow.com"]]]; 

Và điều này đã xóa chế độ xem thành nền mặc định và bắt đầu tải trang tiếp theo như mong đợi.

Tôi hy vọng điều này cũng giúp người khác.

8

đánh giá javascript thường nhanh hơn tải yêu cầu mới.

[webview stringByEvaluatingJavaScriptFromString:@"document.open();document.close();"]; 
+1

Câu trả lời hay nhất tôi đã xem. –

0

i thích như sau:

[m_webView stringByEvaluatingJavaScriptFromString:@"location.replace('about:blank')"] 
+1

tại sao bạn thích nó? – jujule

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