如果一個新的iOS項目在Xcode 4.3.2與空應用程序模板創建,並在AppDelegate.m
:在iOS上,如果視圖控制器沒有視圖,爲什麼NSLog(@「self.view是%p」,self.view)崩潰?
self.window.rootViewController = [[FooViewController alloc] init];
和FooViewController
的viewDidLoad
,以下內容:
NSLog(@"self.view is %p", self.view);
NSLog(@"self.view is %@", self.view);
將打印出來的視圖,所以它看起來像默認loadView
將實例化一個視圖,並將其分配給self.view
。
所以,如果我重寫loadView
與所有空方法,並註釋掉上面的第二個NSLog
聲明,我預計第一NSLog
聲明打印出來0x0
,而是應用程序就在這個NSLog
線壞內存訪問崩潰的原因。爲什麼會這樣?
+1好的研究! –
是的,就是這樣。我錯過了溢出......我刪除了我的答案。 –
感謝您的洞察力。當'self.view'被訪問時......我認爲這只是返回'view'實例變量?由於'view'由'@property(nonatomic,retain)UIView * view定義;'這不就是一個實例變量嗎?如果是這樣的話,那麼'@ synthesize'產生的訪問器應該返回實例變量......你提到了試圖「加載視圖」的超類...它如何加載視圖(從哪裏來?)當視圖爲零? –