簡體   English   中英

每次打開應用程序都運行代碼-更好的方法?

[英]Run Code Every Time App Opens - Better Way?

我需要在每次打開應用程序時都運行代碼,包括是否僅在掛起(用戶按下主屏幕按鈕,然后返回到應用程序)的代碼。

我已經知道viewDidLoad僅在初始VC加載時加載,因此不能滿足我的需要。 而且viewWillAppear / viewDidAppear也不會這樣做。 這個SO線程有一個答案,但這是六年前的事,我不喜歡這個答案。 本質上,它說創建觀察者。 但是,這似乎浪費資源,並且觀察者創建了那些將循環保存在內存中的引用循環。

如果沒有人提供給我更好的解決方案,我可以嘗試在AppDelegate中嘗試“ applicationDidBecomeActive”,但是我盡量不要用ViewController代碼加載我的appDelegate。

我的問題是,自從回答此SO線程以來的六年中,Swift / iOS10現在是否允許使用更干凈的解決方案?

如果您不想使用NSNotificationCenter而不是在AppDelegate中創建Viewcontroller的全局對象

並將代碼與您的viewController對象一起放入applicationDidBecomeActive中

因為applicationDidBecomeActive在您啟動應用程序時以及在您按下主屏幕按鈕並從后台發出時都會調用EveryTime,所以您無需在viewWillAppear中編寫代碼。

據我進行更多研究后得出的結論,自六年前以來,沒有新的方法。 但是,applicationDidBecomeActive方法效果很好:

func applicationDidBecomeActive(_ application: UIApplication) {
    guard let rvc = self.window?.rootViewController as? firstVCName else { return }
    rvc.nameOfMethodYouWantToCall()
}

上面獲得了對現有VC的引用(而不是創建一個新實例)。 然后,它調用該方法,而不必使用代碼加載appDelegate。 非常簡單高效。

我對此進行了測試,這正是我需要的,每次打開應用程序時都會運行的代碼。 這是非常一致的。

暫無
暫無

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

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