Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone “如何”;“释放”;ARC上的UIWebView_Iphone_Objective C_Ios_Xcode_Ios5 - Fatal编程技术网

Iphone “如何”;“释放”;ARC上的UIWebView

Iphone “如何”;“释放”;ARC上的UIWebView,iphone,objective-c,ios,xcode,ios5,Iphone,Objective C,Ios,Xcode,Ios5,我正在尝试开发一款非常简单的浏览器,作为iPad应用程序的一部分。该浏览器将具有选项卡。所有选项卡都基于.xib,其中UIWebView填充了几乎所有的.xib框架。 我将它们存储在一个名为tabsArray的NSMutableArray数组中 下面是我如何向数组添加一个新选项卡: 声明: h m 如何在屏幕上显示它: [self.view addSubview:[[tabsArray objectAtIndex:currentViewTag+1] view]]; 最后,当用户关闭选项卡(带有

我正在尝试开发一款非常简单的浏览器,作为iPad应用程序的一部分。该浏览器将具有选项卡。所有选项卡都基于.xib,其中
UIWebView
填充了几乎所有的.xib框架。 我将它们存储在一个名为
tabsArray
NSMutableArray
数组中

下面是我如何向数组添加一个新选项卡: 声明:

h

m

如何在屏幕上显示它:

[self.view addSubview:[[tabsArray objectAtIndex:currentViewTag+1] view]];
最后,当用户关闭选项卡(带有特定索引)时,我将尝试“释放”UIWebView:

我的问题是:这样做似乎并没有释放它。内存消耗保持不变,如果我正在播放youtube视频,音频将继续播放。 我是编程新手,从iOS5开始iOS开发,使用ARC,所以我可能会介绍一些与内存管理相关的基本细节

解决方案:


好的,我发现保留webview的是PullToRefreshView的实现(https://github.com/chpwn/PullToRefreshView). 当我把它的delegate设置为nil时;一切正常

属性
pagina
是一个强属性,因此它保留了您在以下内容中为其指定的值:

self.pagina = [[UIDetailWebController alloc] initWithNibName:@"UIDetailWebController" bundle:nil];
因此,您应该将其设置为
nil

[tabsArray removeObjectAtIndex:index];
self.pagina = nil; // Add this line.
最后,并非不需要以下行:

[[tabsArray objectAtIndex:index] setWebView:nil];
[[tabsArray objectAtIndex:index] setView:nil];
这句话:

[[[tabsArray objectAtIndex:index] view] removeFromSuperview];
可简化为:

[self.pagina removeFromSuperview];

属性
pagina
是一个强属性,因此它保留了您在中为其指定的值:

self.pagina = [[UIDetailWebController alloc] initWithNibName:@"UIDetailWebController" bundle:nil];
因此,您应该将其设置为
nil

[tabsArray removeObjectAtIndex:index];
self.pagina = nil; // Add this line.
最后,并非不需要以下行:

[[tabsArray objectAtIndex:index] setWebView:nil];
[[tabsArray objectAtIndex:index] setView:nil];
这句话:

[[[tabsArray objectAtIndex:index] view] removeFromSuperview];
可简化为:

[self.pagina removeFromSuperview];

我认为问题在于将所有UIDetailWebController存储在一个数组中。数组将保留一个指向DetailWebController的强指针。 你应使用:

[tabsArray removeObjectAtIndex:index];
然后设置

self.pagina = nil;

调用
[self.pagina removeFromSuperView]后它应该可以工作。

我认为问题在于您将所有UIDetailWebController存储在一个数组中。数组将保留一个指向DetailWebController的强指针。 你应使用:

[tabsArray removeObjectAtIndex:index];
然后设置

self.pagina = nil;

调用
[self.pagina removeFromSuperView]后应该可以使用。

原始代码已经是self.pagina,我只是在设置问题格式时输入了错误的代码。抱歉。您确定
[tabsArray objectAtIndex:index]
中的
索引
具有正确的值吗?另外,您确定删除视图的代码实际上被调用了吗?原始代码已经是self.pagina,我只是在格式化问题时键入了错误的代码。抱歉。您确定
[tabsArray objectAtIndex:index]
中的
索引
具有正确的值吗?另外,您确定删除视图的代码实际上被调用了吗?youtube视频一直在播放…:/这不能解决问题。但是,可能是这个。我的代码很丰富,有很多不同的方法来创建不同类型的选项卡。也许我忘了中间的东西。我会继续找的,如果我解决了,我会让你知道的!谢谢!:)如果不使用属性pagina,我使用“UIDetailWebController*pagina=[UIDetailWebController alloc…”我不需要做任何事,对吗?YouTube视频继续播放……:它不是解决问题。但是,这可能是。我的代码是广泛的,有很多不同的方法来创建不同类型的制表符。可能我在中间忘记了一些东西。我会继续寻找,如果我解决了,我会告诉你的!谢谢!!)rty pagina,我做了“UIDetailWebController*pagina=[UIDetailWebController alloc….]我不需要做任何事情,对吧?不解决它。但将self.pagina设置为nil realy seams是解决方案。如果我选择不将其作为属性,我只需要UIDetailWebController*pagina,我不需要做任何其他事情来发布webview,对吗?不解决它。但将self.pagina设置为nil realy seams是解决方案。如果我选择将其作为一个属性,我只需要UIDetailWebController*pagina,就不需要做任何其他事情来发布webview,对吗?