【问题标题】:UIWebview memory problemUIWebview 内存问题
【发布时间】:2010-09-22 11:24:56
【问题描述】:

在我的应用程序中,我有一个大内存问题
我需要时动态添加带有 viewController 视图的 UIScrollview
我在滚动时正确删除了 viewController。
在那个 viewController 中我在 IBOutlet 中放置了一个 UIWebiew 并加载 webview 作为

[m_objWebView loadRequest:[NSURLRequest requestWithURL:
                  [NSURL URLWithString:@"http://stackoverflow.com/"]]];

并在 viewControllers dealloc 中释放 UIWebview

- (void)dealloc {

 m_objWebView.delegate=nil;
 [m_objWebView stopLoading];
 [m_objWebView release];
 m_objWebView=nil;

 [[self.view subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];

 [super dealloc];
}

但 5/6 分钟后,我的应用在内存警告后崩溃。

现在我更改直接将 uiwebview 添加到 uiscrollview 的代码,并对三个 webview 进行延迟加载。现在内存泄漏减少了,但它仍然存在。但是现在我有另一个问题,当用户快速滑动时,加载网络内容会出现延迟,有什么办法可以解决这个问题吗?

帮帮我提前谢谢

【问题讨论】:

  • 您是如何创建 Web 视图的?为什么不发布view

标签: iphone objective-c iphone-sdk-3.0 uiwebview ipad


【解决方案1】:

在 dealloc 中从 UIViewController 的视图中删除子视图是不必要的。视图属性及其所有子视图将随着所有者(UIViewController)的释放而自动释放。您需要做的就是释放您保留的所有属性。假设您已将 m_objWebView 声明为 @property (nonatomic, retain) IBOutlet UIWebView *m_objWebView,那么你只需要:

- (void)dealloc {

 m_objWebView.delegate=nil;
 [m_objWebView stopLoading];
 [m_objWebView release], m_objWebView=nil;

 [super dealloc];
}

所以,我建议您研究一下何时何地保留/释放 viewController,这就是您可能仍然能够优化的地方。至于加载网络内容的延迟——嗯,这就是延迟加载的缺点:延迟将内存消耗保持在最低限度,但正如术语所暗示的那样,它并不快。

【讨论】:

  • 感谢 Elise van。有没有办法预加载 UIwebview?与文件夹中的 loacl 内容
  • 当我写答案时,我也在想同样的事情。我想如果您事先知道 url,那么您可以使用 NSKeyedArchiver/NSKeyUnarchiver 缓存视图。但是你必须弄清楚何时以及如何检查新内容。另一方面,也许 WebView 工具包有处理这个问题的方法——我对 UIWebView、NSURL 及其兄弟的了解不够多,无法就此向您提供建议。祝你好运。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-13
  • 2016-01-18
  • 2011-06-16
  • 1970-01-01
相关资源
最近更新 更多