1

我的 iPhone 应用程序基于一个常见的“实用程序模板”,例如 Apple 自己的 Weather 应用程序。

我单击信息按钮,它会翻转屏幕。我点击我的完成按钮......它会翻转回来。那部分似乎一切正常。

我已将 NSLog() 语句放入 FlipSideViewController.m 中的 4 个方法中的每一个中

viewDidLoad
viewWillAppear
viewDidUnload
viewWillDisappear

当我翻转到我的 FlipSide 时,我不应该看到 viewDidLoad 和 viewDidAppear 被调用吗?然后在我翻转时看到 viewWillDisappear 和 viewDidUnload ?

相反,我从来没有看到任何 viewDidUnload 调用。但每次我翻转到我的 FlipSide 时,我都会看到另一个 viewDidLoad。那是错的吗?

来回翻转,一次又一次,我会看到:

viewDidLoad
viewWillAppear
viewWillDisappear

viewDidLoad
viewWillAppear
viewWillDisappear

viewDidLoad
viewWillAppear
viewWillDisappear

这是否意味着视图重新加载了 3 次......但卸载了 0 次?这里不应该有“匹配”的加载/卸载和出现/消失方法吗?

4

1 回答 1

7

一开始我也是这么想的,但显然不是这样的。

viewDidUnload方法实际上仅在视图控制器收到内存警告时才被调用。

尽管如此,当视图控制器被释放时,视图将被释放。

因此,如果您要在 中发布 IB 出口之类的东西viewDidUnload,那很好,但您也必须在其中发布它们dealloc,因为viewDidUnload在正常情况下不会被调用(即,如果您没有收到内存警告)。

编辑:要释放view你只需要调用你的dealloc超级类:UIViewControllerdealloc

- (void) dealloc
{
    // release your stuff, anything that you alloc or retain in your class

    // then call `dealloc` on the super class:
    [super dealloc];
}

在该viewDidUnload方法中,您只需释放应该与视图一起卸载的东西,通常是您IBOutlet在界面构建器中连接到 s 的东西。

- (void) viewDidUnload
{
    // if the property was declared with the "retain" keyword, you can
    // release it simply by setting it to nil like this:
    self.myOutlet = nil;
}
于 2010-11-29T18:19:45.430 回答