gpt4 book ai didi

ios - 在 iOS 中检测前景/背景委托(delegate)的适当位置是什么?

转载 作者:行者123 更新时间:2023-11-28 18:46:03 29 4
gpt4 key购买 nike

背景:

我在 iOS 应用程序中工作。我们有大约 100 个 ViewControllers,我们应用程序中的所有这些从一开始就继承自 BaseViewController。目前在重构时,我看到许多 View Controller 需要检测 willEnterForegroundNotification [1]didEnterBackgroundNotification [2] 代表做一些内部任务。几乎 20~25 View Controller 将它们自己的通知观察器设置到它们的 viewDidLoad 上的委托(delegate)。为了代码清晰,我正在考虑将此检测任务移至中央 BaseViewController

我提出的解决方案:

我的设计如下,

class BaseViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
let notificationCenter = NotificationCenter.default
notificationCenter.addObserver(self, selector: #selector(appMovedToForeground), name: Notification.Name.UIApplicationWillEnterForeground, object: nil)
notificationCenter.addObserver(self, selector: #selector(appMovedToBackground), name: Notification.Name.UIApplicationDidEnterBackground, object: nil)
}

func appMovedToBackground() {
print("App moved to Background!")
}

func appMovedToForeground() {
print("App moved to ForeGround!")
}
}


class MyViewController: BaseViewController {

override func appMovedToBackground() {
print(“Do whatever need to do for current view controllers on appMovedToBackground”)
}

override func appMovedToForeground() {
print(“Do whatever need to do for current view controllers on appMovedToForeground”)
}
}

我看到,如果我将此检测移动到 BaseViewController 中,许多自定义观察者处理任务都会从 subview Controller 中减少。 subview Controller (即示例代码中的 MyViewController)只需要使用这两个函数 appMovedToBackgroundappMovedToForeground 当他们需要时。

问题:

但是,我仍然担心一件事。当我将观察者设置部分移动到 BaseViewController 时,因此所有 ViewControllers(我的项目中大约有 100 个)将在其默认的 viewDidLoad< 中注册观察者 他们中的许多人甚至不会在现实中使用它们。恐怕这种设计可能会严重影响应用程序性能。在这种情况下,在性能与代码清晰度和可维护性之间进行权衡时,我的预期设计是否可以接受?我的案例有更好的设计吗?


引用:

<支持>[1] willEnterForegroundNotification - 在应用进入后台时发布。

<支持>[2] didEnterBackgroundNotification - 在应用程序离开后台状态以成为事件应用程序之前不久发布。

最佳答案

你可以声明一个协议(protocol)让我们称之为BGFGObserver。让前台、后台需要观察的各个VC都对这个协议(protocol)进行确认。在基类中检查 self 是否向 BGFGObserver 确认,如果是则仅注册为观察者。在 BGFGObserver 中,您需要有处理背景和前景的方法。

关于ios - 在 iOS 中检测前景/背景委托(delegate)的适当位置是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59370729/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com