ここにいくつかの奇妙な振る舞いがあります。誰かが確認できることを願って、既知のバグであるか、回避策を提案してください。iPad上に大きなPDFを表示するとUIWebViewが漏れる
私のiPadアプリでは、大きなPDF(〜7MBとグラフィックス重いもの)を表示する必要があります。もちろん、抵抗が最も少ないパスはUIWebViewですが、表示後にアプリがクラッシュします。私は新しいプロジェクトでその振る舞いを分離し、その上でInstrumentsを動かしました。
結果は次のとおりです。彼らはUIWebViewで悪いリークが起こっていることを示しているようです。
最小のビューコントローラに必須コード:
-(IBAction)doPresent:(UIView *)sender
{
NSURL *url = [[NSBundle mainBundle] URLForResource:[NSString stringWithFormat:@"%d", [sender tag]]
withExtension:@"pdf"];
UIWebView *wv = [[[UIWebView alloc] init] autorelease];
UIViewController *vc = [[[UIViewController alloc] init] autorelease];
[vc setView:wv];
UINavigationController *holder = [[[UINavigationController alloc] initWithRootViewController:vc] autorelease];
[self presentModalViewController:holder animated:YES];
[wv loadRequest:[NSURLRequest requestWithURL:url]];
UIBarButtonItem *close = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
target:self
action:@selector(doDismiss:)] autorelease];
[[vc navigationItem] setRightBarButtonItem:close];
}
-(IBAction)doDismiss:(id)sender
{
[self dismissModalViewControllerAnimated:YES];
}
は描かれていない:このVC、そのビュー、および5つのボタンを含む主ニブはdoPresent:
に接続され、それぞれが1 ... 5でタグ付け。アプリバンドルの1.pdf〜5.pdf。それを実行すると、期待どおりに動作しますが、PDFが半ダース程度表示された後にクラッシュするという点が異なります。私は気づくパターンが、私はPDFを表示し、文書の周りにスクロールせずにそれを閉じた場合に予想されるように、それがリリースさ、ということである
:楽器(割り当て)の下でそれを実行
はこの興味深いプロットをもたらしました漏れを最小限に抑えるしかし、私が触ってスクロールすると、ちょっとでもメモリは解放されません。後続のPDFを表示しても、無駄になったメモリは再利用されていないように見えますが、それぞれのメモリを割り当てています。シミュレータを実行してメモリ警告をトリガしても、このメモリは復帰しません。
使用量が〜25MBに達すると、プログラムはkill -9
'になりました。これは私にとっては低そうだ、他のいくつかのリソースがアプリのメモリのほかに漏れていることを示唆している。
これはiPad 1上で実行され、4.3が実行され、再起動されました。
アイデア?回避策?私の愚かな欠点は?
に固定しているようです。同じビューをリサイクルすると、それは違うのですか?私たちが持っていた漠然とした問題の解決策は、Webビューを閉じる前に 'about:blank'のような空のページをロードすることでした。 – drawnonward
私はabout:blank trickを試していません。それは一見価値があるかもしれません。 – rgeorge
ウェブビューをいくらかリサイクルすると問題は緩和されますが、問題は解決されません。 – rgeorge