[英]loadView called multiple times when view property not set?
我剛剛遇到了一些我以前從未見過的東西,我想我會在這里要求核實原因。 我有一個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];
}
控制台輸出:
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]
在loadView方法的開頭添加[super loadView]
將您的代碼放在viewDidLoad中,並注釋loadView方法
您的重寫loadView
必須分配一個以self.view
。
- (void)loadView
{
self.view = [UIView new];
}
每篇文檔, 請訪問https://developer.apple.com/documentation/uikit/uiviewcontroller/1621454-loadview
您可以覆蓋此方法以手動創建視圖。 如果選擇這樣做,請將視圖層次結構的根視圖分配給視圖屬性。 您創建的視圖應該是唯一的實例,不應與任何其他視圖控制器對象共享。 您對此方法的自定義實現不應該調用super。
據推測,UIKit內部有幾個地方被稱為這樣的東西:
if (viewController.view == nil) {
[viewController loadView];
}
我認為這里有兩點。 首先,我認為你的假設是正確的,因為任何調用視圖的方法都是nil,因此再次請求視圖控制器的視圖。 這將導致它經過-loadView
作為記錄為-view
中的UIViewController中的文檔 。
至於為什么之后調用-viewDidLoad
,即使它沒有加載視圖; 我想,在-loadView
地方,假設視圖已經加載並且之后直接調用-viewDidLoad
。
無論哪種方式,如果您自己實現-loadView
,則必須在其末尾具有有效視圖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.