每次应用程序打开运行代码 - 更好的方式?

时间:2017-02-13 15:28:37

标签: ios swift lifecycle

我需要每次应用程序打开时运行代码,包括它是否仅被暂停(用户点击主页按钮,然后返回到应用程序)。

我已经知道viewDidLoad只会加载初始的VC加载,因此不能满足我的需要。并且viewWillAppear / viewDidAppe也不会这样做。这个SO帖子有an answer,但是它来自六年前,我不喜欢这个答案。从本质上讲,它创造了一个观察者。然而,这似乎浪费了资源,观察者创建了那些将事物保存在内存中的引用循环。

如果没有人给我一个更好的解决方案,我可能会尝试" applicationDidBecomeActive"在AppDelegate中,但我尽量不使用ViewController代码加载我的appDelegate。

我的问题是,自从这个SO线程被回答后的六年中,Swift / iOS10现在是否允许更清晰的解决方案?

2 个答案:

答案 0 :(得分:5)

如果您不想使用NSNotificationCenter,请在 AppDelegate

中制作Viewcontroller的全局对象

并使用viewController对象将代码放入 applicationDidBecomeActive

因为 applicationDidBecomeActive 会在您启动应用程序时调用everyTime,当您按下主页按钮并来自后台时,您不需要在viewWillAppear中编写代码。

答案 1 :(得分:1)

据我进一步研究后可以看出,自六年前那个帖子以来没有新方法。但是,applicationDidBecomeActive方法确实运行良好:

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

以上内容获取对现有VC的引用(而不是创建一个全新的实例)。然后它调用该方法,而不必使用代码加载appDelegate。非常简单有效。

我对此进行了测试,它正是我所需要的,每次打开应用程序时运行的代码。它非常一致。