在iPad上显示大型PDF时UIWebView泄露

rge*_*rge 5 pdf memory-leaks uiwebview ipad ios

这是一些奇怪的行为,我希望有人可以确认是一个已知的bug,或建议一个解决方法.

我的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];
}
Run Code Online (Sandbox Code Playgroud)

没有图示:主要的笔尖包含这个VC,它的视图和连接的五个按钮doPresent:,每个标记有1 ... 5; 应用程序包中的1.pdf到5.pdf.运行它并且它可以像您期望的那样工作,除了它在PDF的六个左右视图之后崩溃.

在仪器(分配)下运行它产生了这个有趣的情节: 内存使用情节

我注意到的模式是,如果我显示PDF并在不滚动文档的情况下将其关闭,它会按预期释放,泄漏最少.但是,如果我触摸它并滚动,即使是一点点,内存也不会被释放.查看后续PDF似乎没有重用任何浪费的内存,但每个都分配了更多自己的内存.在模拟器中运行并触发内存警告也不会获得此内存.

当使用量达到〜25mb时,程序得到了kill -9'd.这对我来说似乎很低,暗示除了app内存之外还有一些其他资源被泄露.

这是在运行4.3的iPad 1上重新启动.

想法?解决方法?我的愚蠢遗漏?

rge*_*rge 2

好吧,苹果终于给我回复了错误报告,他们承认了这个错误,并声称它已在最新的 ios 5.x 版本中修复。我们拭目以待。