我目前正在使用 ARC 在 iOS 5.1 中构建导航控制器应用程序。我经常需要显示网页,我制作了一个 Web 查看器,它只是一个 UIWebView,两侧有一些自定义内容。当用户完成浏览页面时,他们点击返回按钮,该按钮应该释放与自定义 Web 查看器相关的所有内存。我的问题是按下后退按钮时似乎没有释放所有内存。我已经构建了一个玩具应用程序(在 github 上),它只有几个按钮,每个按钮都有一个调用不同页面的第一响应者。
@implementation ViewController
-(IBAction)googlePressed:(id)sender
{
CustomWebView *customWebView = [[CustomWebView alloc] initWithStringURL:@"http://www.google.com"];
[self.navigationController pushViewController:customWebView animated:NO];
}
-(IBAction)ksbwPressed:(id)sender
{
CustomWebView *customWebView = [[CustomWebView alloc] initWithStringURL:@"http://www.ksbw.com/news/money/Yahoo-laying-off-2-000-workers-in-latest-purge/-/1850/10207484/-/oeyufvz/-/index.html"];
[self.navigationController pushViewController:customWebView animated:NO];
}
-(IBAction)feedProxyPressed:(id)sender
{
CustomWebView *customWebView = [[CustomWebView alloc] initWithStringURL:@"http://feedproxy.google.com/~r/spaceheadlines/~3/kbL0jv9rbsg/15159-dallas-tornadoes-satellite-image.html"];
[self.navigationController pushViewController:customWebView animated:NO];
}
-(IBAction)cnnPressed:(id)sender
{
CustomWebView *customWebView = [[CustomWebView alloc] initWithStringURL:@"http://www.cnn.com/2012/04/04/us/california-shooting/index.html?eref=rss_mostpopular"];
[self.navigationController pushViewController:customWebView animated:NO];
}
CustomWebView 只是在 IB 中链接到 UIWebView 属性的 UIWebView
@implementation CustomWebView
@synthesize webView, link;
- (id)initWithStringURL:(NSString *) stringURL
{
if (self = [super init]) {
link = stringURL;
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
NSURL *url = [NSURL URLWithString:link];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
[webView loadRequest:urlRequest];
}
- (void)viewDidUnload
{
[super viewDidUnload];
}
我的问题是我将堆基线设置为加载所有内容后的初始 ViewController。然后我在加载页面后检查堆,然后返回 ViewController 并获得以下堆:
这表明在每一系列单击按钮并返回 ViewController 之后,即使应该全部释放 CustomWebView,堆也会继续增长。
编辑:
上面描述的示例项目可以在github上找到