我正在尝试开发一个非常简单的浏览器,成为iPad应用程序的一部分。该浏览器将有标签。所有选项卡都基于.xib,UIWebView
填充几乎所有.xib帧。
我将所有内容存储在名为NSMutableArray
的{{1}}内。
所以,这是我在数组中添加新标签的方法: 声明:
·H
tabsArray
的.m
@property (nonatomic,strong) NSMutableArray *tabsArray;
@property (nonatomic,strong) UIDetailWebController *pagina;
我如何在屏幕上显示它:
self.pagina = [[UIDetailWebController alloc] initWithNibName:@"UIDetailWebController" bundle:nil];
[tabsArray insertObject:pagina atIndex:currentViewTag+1];
最后,当用户关闭一个标签(带有特定索引)时,我正试图“释放”UIWebView:
[self.view addSubview:[[tabsArray objectAtIndex:currentViewTag+1] view]];
我的问题是:看来通过这样做我根本就不释放它。内存消耗保持不变,如果我正在播放YouTube视频,则音频会继续播放。 我是编程方面的新手,并且使用ARC开始了iOS 5的iOS开发,所以我可能会放弃一些与内存管理相关的基本细节。
解决方案:
好的,我发现保留webview的是PullToRefreshView(https://github.com/chpwn/PullToRefreshView)的实现。当我将它的委托设置为nil时;一切正常!
答案 0 :(得分: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];
那条线:
[[[tabsArray objectAtIndex:index] view] removeFromSuperview];
可简化为:
[self.pagina removeFromSuperview];
答案 1 :(得分:2)
我认为问题在于您将所有UIDetailWebControllers存储在一个数组中。该数组保持一个指向DetailWebController的强指针。 你应该使用:
[tabsArray removeObjectAtIndex:index];
然后设置
self.pagina = nil;
致电[self.pagina removeFromSuperView];
后,它应该有效。