【问题标题】:Should a UIView Observe Notification?UIView 应该观察通知吗?
【发布时间】:2019-12-19 10:45:07
【问题描述】:

我在 iOS 中工作,我有一个自定义视图,

class MyView: UIView {

}

我的一个ViewControllers 正在使用自定义视图,例如,

class MyViewController: UIViewController {

    viewDidLoad(){
        let view = MyView() // ...
    }

}

我的自定义视图 MyView 需要观察通知,因此我已将其添加到 MyView's init 中并在 dealoc 块中删除,例如,

class MyView: UIView {

    init() {
        addObserver(...)
    }

    dealloc {
        removeObserver(...)
    }
}

我的一位同事评论说,视图不应该负责处理观察者,而是关联的ViewControllers 应该处理它。我的设计有问题吗?如果我按照目前的设计,我将来可能会面临哪些问题?

【问题讨论】:

  • 我的一个注释:“如果您的应用程序面向 iOS 9.0 及更高版本或 macOS 10.11 及更高版本,则无需在其 dealloc 方法中取消注册观察者”from here

标签: ios swift design-patterns uiview uiviewcontroller


【解决方案1】:

如果您使用 MVC/MVVM 或类似方法遵循最佳建模实践,则您的视图应尽可能“愚蠢”,并仅渲染 ViewController 告诉它们的内容。

向 UIView 添加观察者直接将该视图与您的应用程序逻辑强耦合。这会降低视图的可重用性,并导致您的应用程序逻辑更难以推理和测试该逻辑是否在此视图及其控制器之间拆分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多