【问题标题】:"Delegates or NSNotifications" Adjudging performance of code?“代表或 NSNotifications” 判断代码的性能?
【发布时间】:2012-09-07 11:23:14
【问题描述】:

在我的应用程序中,我必须将图像文件显示为表格视图中的列表,以全尺寸和多个缩略图的形式显示它们。因此,基本上我开发了三个单独的类来处理这三个视图。现在要执行任何文件操作,我可以想到两种方法:

  1. 为所有这些类创建 appdelegate 对象,并相应地处理它们。当在一个类中对照片文件执行一项操作时,所有其他类都使用 NSNotification 通知,将 obeserver 保持为 Appdelegate 对象。

  2. 在需要时为这些类创建本地对象,并分配委托以通过调用相关方法从一个类执行文件操作。

但是,我无法判断哪种方法在内存使用和性能方面会更好?提前致谢。

【问题讨论】:

    标签: objective-c memory-management nsnotificationcenter performance-testing nsnotifications


    【解决方案1】:

    使用一对一的直接消息传递关系是更简单的关系和通信/消息传递方式。支持委托回调 -- 第 2 号

    使这种设计具有双向性也很容易——如果视图离开屏幕,您可以执行取消操作。如果加载失败,更容易通知控制器。


    NSNotifications 相对重量级。没必要。

    在单例(应用程序委托)中存储一堆东西可能会导致一些不必要的保留对象。如果您的程序是并发的,那么这会增加更多的复杂性。不需要任何这种复杂性或引入可变全局状态,也没有理由提出对象应该具有更大的访问范围和生命周期。

    除此之外,您还可以针对特定需求进行优化,但我目前看不到任何需求。

    【讨论】:

      【解决方案2】:

      这在很大程度上取决于代码以及您构建应用程序的方式。我一般在以下情况下使用委托:

      • 委托对象存在于需要它的主要对象之前和之后的位置。换句话说,主对象不需要担心它的委托的生命周期。
      • 对象与其委托对象之间的关系是严格的一对一关系。换句话说,只有一个委托对象需要与主对象交互。我已经看到了代表被换入和换出的情况,我不推荐这样的代码。
      • 主要对象需要来自委托的信息。

      我会在以下情况下使用通知:

      • 多个对象需要知道另一个类中发生的事情。
      • 主类不需要与其他类交互,甚至不需要知道它们的存在。

      无论您选择哪一个,我都不会为每个图像拥有一个以上的文件管理对象。简单的原因是拥有多个意味着您需要确保它们都具有相同的状态,因此可以相互通信。否则会出现错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-30
        • 1970-01-01
        • 2020-02-27
        • 1970-01-01
        相关资源
        最近更新 更多