現在、ARC を使用する iOS 5.1 でナビゲーション コントローラー アプリを作成しています。私はしばしば Web ページを表示する必要があり、側面にいくつかのカスタム コンテンツを持つ単なる UIWebView である Web ビューアーを作成しました。ユーザーがページを見終わったら、戻るボタンを押します。これにより、カスタム 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にあります。