2012-03-18 72 views
0

我正在尝试开发一个非常简单的浏览器,使其成为iPad应用程序的一部分。该浏览器将有选项卡。所有选项卡都基于.xib文件,其中UIWebView填充几乎所有.xib帧。 我将它们全部存储在NSMutableArray之内,称为tabsArray如何“释放”ARC上的UIWebView

所以,这里是我如何添加一个新的选项卡数组: 声明:

.H

@property (nonatomic,strong) NSMutableArray *tabsArray; 
@property (nonatomic,strong) UIDetailWebController *pagina; 

.M

self.pagina = [[UIDetailWebController alloc] initWithNibName:@"UIDetailWebController" bundle:nil]; 
[tabsArray insertObject:pagina atIndex:currentViewTag+1]; 

我怎么显示它在屏幕上:

[self.view addSubview:[[tabsArray objectAtIndex:currentViewTag+1] view]]; 

最后,这里是我如何努力,当用户关闭选项卡(具有特定指数),以“释放”的UIWebView:

[[[tabsArray objectAtIndex:index] view] removeFromSuperview]; 
[[tabsArray objectAtIndex:index] setWebView:nil]; 
[[tabsArray objectAtIndex:index] setView:nil]; 
[tabsArray removeObjectAtIndex:index]; 

我的问题是:看起来,做这个,我只是穿上” t释放它。内存消耗保持不变,如果我正在播放YouTube视频,则会继续播放音频。 我在编程方面很新颖,并且用iOS 5开始iOS开发,所以我可能会放一些与内存管理有关的基本细节。

SOLUTION:

好吧,我发现什么固定的WebView是PullToRefreshView的实现(https://github.com/chpwn/PullToRefreshView)。当我把它设置为零时;一切正常!

+0

是的,它是self.pagina – JulianoRossi 2012-03-18 20:21:41

+0

原始代码已经self.pagina,我只是在格式化问题时输入了错误。抱歉。 – JulianoRossi 2012-03-18 20:23:51

+0

你确定'[tabsArray objectAtIndex:index]'中的'index'是否具有正确的值?你是否确定你移除视图的代码实际上是被调用的? – sch 2012-03-18 20:35:15

回答

2

酒店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]; 

而且t帽子行:

[[[tabsArray objectAtIndex:index] view] removeFromSuperview]; 

可以简化为:

[self.pagina removeFromSuperview]; 
+0

youtube视频不断播放...:/ – JulianoRossi 2012-03-18 20:32:45

+0

这不是解决问题。但是,这可能是这个。我的代码很广泛,有很多不同的方法来创建不同类型的选项卡。大概我忘记了中间的东西。我会继续寻找,如果我解决了,我会让你知道的!谢谢! :) – JulianoRossi 2012-03-18 20:51:52

+0

如果不是属性pagina,我做了“UIDetailWebController * pagina = [UIDetailWebController alloc ....]我不需要做任何事情,对吧? – JulianoRossi 2012-03-18 21:17:58

2

我认为这个问题是您存储阵列中的所有UIDetailWebControllers。该数组保留了一个指向您的DetailWebController的强指针。 你应该使用:

[tabsArray removeObjectAtIndex:index]; 

然后设置

self.pagina = nil; 

调用[self.pagina removeFromSuperView];它应该工作之后。

+0

没有解决它但设置self.pagina为零实际接缝如果我选择而不是使其成为一个属性,我只是UIDetailWebController * pagina,我不需要做任何事情来释放webview,对吧? – JulianoRossi 2012-03-18 21:35:06