2012-12-13 74 views
0

在我目前正在使用的應用程序中,有一種情況是我有一組數據的兩個屏幕:一個是列表,另一個是地圖。每個屏幕都有自己的視圖控制器。默認屏幕是列表視圖,所以視圖控制器首先加載。但是其他地圖屏幕視圖控制器也被加載和設置(因爲它封裝了列表屏幕視圖控制器使用的一些地理地圖相關數據),即使地圖屏幕還不可見。在UIViewController的視圖屬性訪問器中懶惰地實例化nib

但是,我不希望地圖屏幕視圖控制器的筆尖和視圖加載並初始化,直到用戶切換到該屏幕。

在地圖屏幕視圖控制器中覆蓋view屬性訪問器是否有任何問題,如下面的代碼中所示,並且延遲加載/實例化nib? (在地圖屏幕視圖控制器的viewDidLoad方法被調用之前,地圖屏幕即將被顯示之前view屬性不被訪問。)我已經測試過這種方式運行良好,但我從來沒有見過這樣做。

- (UIView *)view { 
    if (!_view) { 
     UINib *nib = [UINib nibWithNibName:@"MyNibName" bundle:nil]; 
     [nib instantiateWithOwner:self options:nil]; 
    } 
    return _view; 
} 

回答

1

想出了一個更好的答案。

我正在使用的代碼其實不是我自己的,我沒有注意到的是,地圖畫面的視圖控制器是不實際的UIViewController一個子類,它只是繼承NSObject(並加入了自己view屬性)。

通過改變地圖畫面的視圖控制器實際上是從UIViewController繼承,然後使用initWithNibName:bundle:指定初始化時,筆尖是默認延遲加載/實例化時view屬性進行訪問 - 就像我在做什麼。

所以,我的問題的答案是這樣的:使用系統框架,你甚至不會遇到這些問題! :)但它似乎確實是我的代碼與實際的最佳實踐模式一致的情況; see Apple's guidelines and recommendations here

相關問題