Dự án của tôi là một lib tĩnh lai để hiển thị UIWebView với một số JS để kiểm soát logic. Khi tôi sử dụng 64bit và chạy demo trên iOS 8/iPhone 6, bộ nhớ sẽ tiếp tục 30M trở lên!Rò rỉ bộ nhớ với UIWebView
Khi tôi sử dụng thế hệ trong công cụ, mức sử dụng bộ nhớ tăng gần như là tất cả từ webcore; nó có nghĩa là có rò rỉ trong mã JS? Tôi không thể tìm thấy một rò rỉ khi tôi sử dụng Safari để chạy JS tương tự trực tiếp.
Khi tôi phát hành UIWebView, bộ nhớ vẫn chưa được giải phóng; Tôi đã thử nghiệm với phân bổ công cụ. Có một số webcore và (không đối tượng) vẫn còn trong bộ nhớ, những gì tôi có thể làm gì để phát hành chúng?
- 0JavaScriptCore WTF :: MallocHook :: recordAllocation (void *, unsigned long)
- 1 JavaScriptCore WTF :: fastMalloc (unsigned long)
- 2 WebCore WebCore :: SharedBuffer :: đệm() const
- 3 WebCore WebCore :: SharedBuffer :: dữ liệu() const
- 4 WebCore WebCore :: ResourceLoader :: didReceiveDataOrBuffer (const char *, unsigned int, WTF :: PassRefPtr, lâu dài, WebCore :: DataPayloadType)
- 5 WebThêm WebCore :: SubresourceLoader :: di dReceiveDataOrBuffer (const char *, int, WTF :: PassRefPtr, lâu dài, WebCore :: DataPayloadType)
- 6 WebCore WebCore :: SubresourceLoader :: didReceiveBuffer (WTF :: PassRefPtr, lâu dài, WebCore :: DataPayloadType)
- 7 WebCore WebCore :: ResourceLoader :: didReceiveBuffer (WebCore :: ResourceHandle *, WTF :: PassRefPtr, int)
- 8 WebCore WebCore :: SynchronousResourceHandleCFURLConnectionDelegate :: didReceiveDataArray (__ CFArray const *)
tôi sử dụng mã sau đây.
-(void)createUIWebview{
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:serviceUrl]]];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
[[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"WebKitCacheModelPreferenceKey"];
}
-(void)dealloc{
if (_webView.isLoading){
[_webView stopLoading];
}
[_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
_webView.delegate=nil;
[_webView removeFromSuperview];
[_webView release];
_webView = nil;
}
Tôi đã nghiên cứu các liên kết sau, nhưng dường như chúng không giải quyết được sự cố của tôi. UIWebview có bị rò rỉ trong iOS 8 không? Và vấn đề dường như không rõ ràng khi tôi sử dụng iOS 6 trong iPhone4.
Whats the proper way to release a UIWebView?
iOS 8 UIWebView memory management
UIWebView leaks, JS Garbage Collector & WebCore VMs
Release memory/cookie/cache from UIWebView once closed
'WKWebView' không kế thừa từ' UIWebView', đây là lớp hoàn toàn mới và khác biệt. Nếu bạn đang sử dụng iOS 8, bạn chắc chắn nên sử dụng nó trên 'UIWebView'. Bạn cũng nên sử dụng ARC. –
@jshier - Cảm ơn bạn đã nắm bắt ... Tôi đã chỉnh sửa câu trả lời từ những gì tôi muốn nói (Đó là họ chia sẻ nhiều tên gọi cùng một phương thức làm cho nó trở thành một công tắc rất dễ dàng). –
cảm ơn bạn rất nhiều vì giải pháp của bạn, WKWebView hoạt động cho trường hợp của tôi! –