UIWebview内存问题

时间:2010-09-22 11:24:56

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

在我的应用程序中,我有很大的内存问题 我需要时动态地添加带有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进行了延迟加载。现在内存泄漏减少但它仍然存在。但是现在我还有另外一个问题,当用户快速刷卡时,加载网页内容会有任何延迟来解决这个问题吗?

帮助我提前谢谢

1 个答案:

答案 0 :(得分:2)

从dealloc中的UIViewController视图中删除子视图是不必要的。视图属性及其所有子视图将在所有者(UIViewController)发布时自动释放。您需要做的就是释放您保留的所有属性。假设您已将m_objWebView声明为 @property(非原子,保留)IBOutlet UIWebView * m_objWebView,然后您只需要:

- (void)dealloc {

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

 [super dealloc];
}

所以,我建议你研究一下保留/释放viewController的时间和地点,你仍然可以在这里优化。至于加载网页内容的延迟 - 嗯,这是延迟加载的缺点:懒惰使你的内存消耗降到最低,但是,正如术语所暗示的那样,它并不快。