我在一个显示为modalViewController子视图(翻转过渡)的UIWebView上播放youtube视频。一切正常,即使UIWebView被释放了,在重复选择这个modalViewController几次之后,我仍然收到内存警告。
我已经以编程方式在ViewDidLoad中添加了我的UIWebView。在viewDidDisappear中,我检查[UIWebView retainCount],如果大于1,请执行以下步骤:
[[NSURLCache sharedURLCache] removeAllCachedResponses];
[self.webView removeFromSuperview];
self.webView.delegate = nil;
self.webView = nil;
NSLog(@"[self.webView retainCount] %d", [self.webView retainCount]);我在iOS 4.2的xCode 3.2.5上运行我的代码。
感谢你所做的一切。
发布于 2010-12-13 17:51:13
我认为您处理内存管理问题的方式是错误的。如果您知道自己在做什么,那么检查retainCount是一种有效的调试技术。然而,它不是一个内存管理工具。在您的特定情况下,如果UIWebView正在显示,它将始终保留计数> 1。superview将保留它,从而使“如果”无用。
如果webView属性定义良好(即无原子,保留),则语句:
self.webView = nil;应该释放webView。一个常见的错误是使用以下命令初始化属性:
self.webView = [[UIWebView alloc] init];如果webView被定义为"retain“,这可能会导致泄漏。正确的方法是
self.webView = [[[UIWebView alloc] init] autorelease];如果你不能多次显示你的控制器而不耗尽内存,那就是内存泄漏了。使用Instruments (特别是泄漏)来查找正确释放笔记的对象。This is a good tutorial。
请注意保持您的保留和释放平衡,并检查是否有泄漏。
发布于 2011-01-06 05:14:13
向下滚动到我的答案,以获得公认答案的扩展-我已经有这个问题好几天了,现在它已经解决了!
https://stackoverflow.com/questions/4427378
复制相似问题