当view属性没有设置时,loadView多次调用?

fuz*_*oat 5 iphone cocoa-touch objective-c

我刚刚遇到了一些我以前从未见过的东西,我想我会在这里要求核实原因.我有一个UIController,他的视图是以编程方式定义的,我今天注意到当我从其loadView中注释掉代码(以测试其他东西)时,loadView和viewDidLoad都被调用了四次.我的想法是因为我没有设置视图属性iOS尝试多次加载视图,虽然我仍然有点好奇,如果这也是为什么viewDidLoad也被调用.

- (void)loadView {
    NSLog(@"%s", __PRETTY_FUNCTION__);

    // MAP VIEW
    // MKMapView *tempMapView = [[MKMapView alloc] init];
    // [tempMapView setDelegate:self];
    // [self setView:tempMapView];
    // [self setCustomMapView:tempMapView];
    // [tempMapView release];
}
Run Code Online (Sandbox Code Playgroud)

控制台输出:

2011-02-02 14:10:00.194 Xrails[19501:307] -[MapController loadView]
2011-02-02 14:10:00.209 Xrails[19501:307] -[MapController viewDidLoad]

2011-02-02 14:10:00.212 Xrails[19501:307] -[MapController loadView]
2011-02-02 14:10:00.226 Xrails[19501:307] -[MapController viewDidLoad]

2011-02-02 14:10:00.229 Xrails[19501:307] -[MapController loadView]
2011-02-02 14:10:00.243 Xrails[19501:307] -[MapController viewDidLoad]

2011-02-02 14:10:00.246 Xrails[19501:307] -[MapController loadView]
2011-02-02 14:10:00.259 Xrails[19501:307] -[MapController viewDidLoad]
Run Code Online (Sandbox Code Playgroud)

Asa*_*han 9

在loadView方法的开头添加[super loadView]

  • 根据文档,你不应该调用`[super loadView]` (7认同)

Dan*_*ull 1

我认为这里有两点。首先,我认为您的假设是正确的,因为任何调用视图的内容都将返回 nil,因此再次请求视图控制器的视图。这会导致它按照UIViewController 文档中的-loadView记录进行。-view

至于为什么-viewDidLoad事后会被调用,即使它还没有加载视图;我想在哪里-loadView被调用是假设视图已经加载并-viewDidLoad随后直接调用。

不管怎样,如果你-loadView自己实现,你最终必须有一个有效的观点。