在iOS上,如果视图控制器还没有视图,为什么NSLog(@"self.view是%p",self.view)崩溃?

nop*_*ole 2 iphone uiviewcontroller uiview ios

如果在Xcode 4.3.2中使用空应用程序模板创建了一个新的iOS项目,并在AppDelegate.m:

self.window.rootViewController = [[FooViewController alloc] init];
Run Code Online (Sandbox Code Playgroud)

FooViewControllerviewDidLoad,以下内容:

NSLog(@"self.view is %p", self.view);
NSLog(@"self.view is %@", self.view);
Run Code Online (Sandbox Code Playgroud)

将打印出视图,因此看起来默认情况下loadView将实例化视图并将其分配给self.view.

因此,如果我loadView使用全空方法覆盖,并注释掉NSLog上面的第二个语句,我希望NSLog打印出第一个语句0x0,但是由于该NSLog行的内存访问不良导致应用程序崩溃.那为什么会这样?

Don*_*Don 5

好吧,经过一个下意识和明显错误的答案后,我尝试了这个.Empty App模板没有rootViewController,因此我使用了单个屏幕模板.运行后,我看到你正在堆栈溢出.在尝试访问self.view时,您正在调用超类上的view属性,然后尝试加载视图以便返回它,就我所见,它正在调用viewDidLoad等.另一个NSLog语句也是如此.