簡體   English   中英

在 viewDidLoad() 之前但在 main 之后調用什么方法?

[英]What method is called before viewDidLoad() but after main?

我觀察到viewDidLoad()didFinishLaunchingWithOptions()之前被調用,我正在尋找可以放置一些必須在viewDidLoad()之前調用的初始化代碼的地方。

有這樣的地方嗎?

此外,從其他地方調用 viewDidLoad() 也是可以接受的。 應該沒問題,還是風險太大?

你錯了。

直接在方法頭下面放一個NSLog,你會看到后面直接調用了ViewDidLoad。

[self.window addSubview:self.yourViewController.view];

因此,您要么使用 viewDidLoad,要么使用您可以使用的並不是很漂亮。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

這甚至在 ViewDidload 之前被調用

 - loadView()

viewDidLoad()之前啟動並附帶一個建議,在此之后永遠不要直接調用。 這是蘋果文檔的鏈接

您可以在 viewDidLoad 中進行應用程序初始化,但不要在此處進行任何邊界或大小設置,因為它們尚未設置。

在 viewDidLayoutSubviews 中執行它們,它在 viewDidLoad 之后調用。

我找到了這篇文章,這對我很有幫助:

UIViewController 生命周期

當我使用 MainWindow.xib 文件添加想要添加到窗口的視圖控制器時,我遇到了類似的問題。

為了解決這個問題,我在應用程序委托的 didFinishLaunchingWithOptions: 方法中分配了窗口的 rootViewController(您也可以調用 addSubView,但分配 rootViewController 更好)。 完成此操作后,您可以輕松地將您想要的任何邏輯放在發生這種情況的前面或后面。 它讓您完全控制視圖控制器何時加載。 相比之下,當視圖控制器通過 nib 加載時,很難執行它前面的代碼(如果可能的話)。 我知道您在應用程序的 plist 中指定了主要的 xib,但我不知道是否有辦法在加載該筆尖之前運行代碼。

通常,由於這個原因,我避免在 xib 中添加視圖控制器。

我的代碼看起來更像:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
   // special pre load logic here...

   UIViewController *myVC = [[MyAwesomeViewController alloc] init];
   self.window.rootViewController = myVC;
   [myVC release];

   // special post load logic here...

   [self.window makeKeyAndVisible];
   return YES;
}

您可以將初始化代碼放在類的init方法中。

從其他地方再次調用viewDidLoad也可以。 這就像任何其他方法一樣。

編輯:

調用viewDidLoad ——但你應該小心內存管理。 如果您在viewDidLoad分配對象,再次調用它會導致泄漏。 因此,由於viewDidLoad的典型功能,您可能希望將代碼提取到另一個方法中,您將重復調用該方法並從viewDidLoad調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM