iPhone如何从内存中删除模态uiviewcontroller

时间:2010-04-05 04:49:45

标签: iphone memory uiviewcontroller

我有一个根UIViewController,它有一个名为webView的属性。 WebView是一个带有XIB的UIViewController,它包含一个UIWebView。从我的根视图我模态(有没有其他方法?)加载webView ViewController并设置其URL,始终在同一页面。

我发现,如果在加载webView之后,我使用其默认网页导航到另一个网页,然后关闭webView并返回到根控制器 - 然后重新打开webView,webView不是显示默认页面,而不是我导航到的页面,这意味着webView ViewController永远不会被破坏并从内存中删除。这让我觉得很糟糕。

所以在根ViewController中,我在viewWillAppear下添加了这段代码:animated -

if (self.webView != nil) {
    self.webView = nil)
}

这还够吗?还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

  

我有一个根UIViewController   有一个名为webView的属性。的WebView   是一个带有XIB的UIViewController   包含一个UIWebView。

首先,一个风格建议。不要命名视图控制器类FooView。将它们命名为FooViewController。因为那是他们的本意。控制器。不是意见。

  

从我的根本看来,我是模态的(在那里   任何其他方式?)加载webView   ViewController并始终设置其URL   到同一页。

您可以通过多种方式在屏幕上显示视图;将它作为模型视图控制器呈现是一种方式。另一种方法是使用导航控制器并将其推送到导航堆栈。另一种方法是使用动画原语并交换活动视图。

如果您以模态方式呈现视图控制器,则应使用委托模式,并让“父”视图控制器在您希望它离开时以模态方式将其解除。

我在这里给出了答案:

Pop-up modal with UITableView on iPhone

非常接近您需要的代码,除了您可能只想拥有一个更简单的委托协议,如:

@protocol FooViewControllerDelegate <NSObject>
- (void)fooViewControllerDidFinish:(FooViewController*)fooViewController;
@end