在我的应用程序中,当我用任何网站URL加载UIWebView
时,内存从30mb跳到140mb左右。
我正在使用ARC
当解雇包含UIWebView的UIWebViewController
[Viewcontroller
]时,它不会释放内存。
任何机构都可以帮助我解决这些内存问题,并请在ARC
加载网页: -
NSURL *nsurl=[NSURL URLWithString:self.url];
NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];
[webview loadRequest:nsrequest];
解雇Viewcontroller: -
[self dismissViewControllerAnimated:YES completion:^{
webview.delegate=nil;
webview=nil;
}];
提前致谢:)
答案 0 :(得分:6)
最后我们发现我们可以删除Web视图的内存缓存
[[NSURLCache sharedURLCache] removeAllCachedResponses];
您可以在收到内存警告时尝试。或者你可以用dealloc方法调用它。
如果仍有问题,请尝试通过调用
来限制内存缓存大小[[NSURLCache sharedURLCache] setMemoryCapacity:size]
祝你好运!
答案 1 :(得分:3)
不要听他们,
这不是问题,手机可以处理所有内存使用情况,尝试使用MKMapView并观察你的内存使用率飙升。
在你的模拟器中,尝试通过低内存警告cmd+shift+m
,看看会发生什么,你不能指望所有的网页浏览量都以相同的内存使用率运行,而且,你有机会为你的电话缓冲它。
iPhone可以处理所有这些,所以你不必担心它。
但是无论如何都要试试这个:
如果取消选中nib文件中的“检测链接”,UIWebViews的行为会发生变化,因此请尝试切换它,看看会发生什么。
答案 2 :(得分:2)
UIWebViewController
的实例数。 (在Xcode中使用Cmd + I,让Instruments打开,选择Allocations,然后在搜索栏中输入UIWebViewController)UIWebViewController
对象进行强有力的引用
不止一个地方。 答案 3 :(得分:2)
在确定存在问题之前,没有必要搜索问题。
内存使用率如此之高有两种可能:
1.UIWebView未被取消分配。
2.它是一些系统缓存或某些特定的iOS内存处理算法。
在第二种情况下,你无能为力。要检查第一种情况,您可以尝试使用仪器或只是子类UIWebView并将记录添加到dealloc方法。
@implementation MyUIWebView
- (void)dealloc
{
NSLog(@"MyUIWebView deallocated!");
}
@end
不要忘记在代码中将UIWebView更改为MyUIWebView。
只有当你确定UIWebView没有被释放时,你应该开始搜索强指针,保留圆圈等等。
答案 4 :(得分:1)
添加
if (webView.isLoading){
webView.stopLoading;
}
webView.delegate=nil;
在此行之前
[self dismissViewControllerAnimated:YES completion...]
没有你的webView应该由ARC负责。不要在完成块中引用Web视图。
答案 5 :(得分:1)
我想您忘记从视图层次结构中删除UIWebView。这将导致额外的保留计数,并防止在您将财产取出时回收内存。
答案 6 :(得分:1)
你应该检查一些事情:
strong
具有view
引用,只要您将其保留在视图层次结构中,此视图就会保留所有子视图,因此任何其他属性都应为weak
,包括您的webView
财产。nil
”所有内容。 ARC会自动nil
strong
dealloc
个weak
个引用。weak
引用执行任何操作。此外,在iOS 5+ nil
上,如果引用的对象在其他地方被释放,则引用会自动变为view
。我认为你的整个视图控制器很可能会被保留在某个地方,从而保留webView
和weak
。
确保您只保留{{1}}对控制器的引用,并让它由容器或呈现控制器保留,以便在它被弹出或解除时自动释放。
答案 7 :(得分:1)
我的申请中遇到了同样的问题。我建议你应该使用WKWebView。 WKWebView是在iOS 8中引入的。 你可以在这里读更多关于它的内容 apple documentation
内存问题肯定已经解决了。您将从webview获得所有功能以及更多功能(即进度)。希望这有帮助
答案 8 :(得分:0)
如果您想立即减少UIWerview的内存使用量,可以尝试:
1
[webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
或
2
[webview loadHTMLString: @"" baseURL: nil];
或
3
[webview loadData:nil MIMEType:nil textEncodingName:nil baseURL:nil];
对我有用。