gpt4 book ai didi

ios - 无法从 UIWebView 完全回收内存使用

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:41:16 25 4
gpt4 key购买 nike

我有以下示例代码(使用 ARC),它添加一个 UIWebView 作为 subview 并随后将其删除(通过屏幕上的点击手势切换):

- (void)toggleWebViewLoading:(UITapGestureRecognizer *)sender
{
if (webView == nil)
{
webView = [[UIWebView alloc] initWithFrame:CGRectMake(0.0f, 100.0f, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height - 100.0f)];
[webView loadRequest:[[NSURLRequest alloc] initWithURL:[[NSURL alloc] initWithString:@"http://www.google.ca"]]];
[self.view addSubview:webView];
}
else
{
[webView removeFromSuperview];
webView = nil;
}
}

当应用程序最初加载空白 UIView 时,它消耗大约 1.29 MB(从 Instruments.app 读取的实时字节)。点击空白的 UIView 会触发 toggleWebViewLoading: 函数,进而创建一个新的 UIWebView,加载 Google,并将其添加为 subview .完成这一系列操作后,内存使用量约为 3.61 MB。再次点击会执行 toggleWebViewLoading: 的第二部分,从其 super View 中删除 UIWebView 并将其设置为 nil。此时内存消耗已降至 3.38 MB

我的问题是,如何从 UIWebView 完全回收内存(即让内存消耗恢复到其初始值 1.29 MBUIWebView 之后的类似值) > 已被删除并设置为 nil)?

其他相关信息

在有人问我为什么如此关心 ~2 MB 的内存节省之前,我使用 Xamarin/MonoTouch 的情况要复杂得多,其中 10+ UIWebView正在消耗 200 MB+ 内存,而且我似乎永远无法在不再需要时回收所有内存。我认为答案归结为这个简单的问题。

最佳答案

我建议监控有多少线程处于事件状态。 UIWebView 为自己生成多个线程。我希望一旦 UIWebView 被释放,它们就不会被正确清理,但这只是一种预感。

关于ios - 无法从 UIWebView 完全回收内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19435818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com