【问题标题】:Use of custom delegate vs NSNotification vs NSUserDefaults state使用自定义委托 vs NSNotification vs NSUserDefaults 状态
【发布时间】:2015-05-13 21:55:04
【问题描述】:

在我的应用程序中,我使用 NSUserDefaults 给出一个状态,然后根据该状态执行操作。在其他地方,我使用 NSNotification-s 来触发其他类中的方法。我觉得对于一个例子来说,使用自定义委托会更好。

使用 NSNotification 与自定义委托相比我现在使用 NSUserDefaults 的优点和缺点是什么?

我的问题专门针对使用 NSUserDefaults 提供状态与使用协议或 NSNotificationCenter 简单调用方法之间的任何性能或潜在问题。

【问题讨论】:

标签: ios objective-c


【解决方案1】:

重要的是要记住 NSUserDefaults 持久化数据。当你从 NSUserDefaults 读写时,你实际上是在读写磁盘。每当您使用 NSUserDefaults 时,您应该问自己“这是需要在应用程序启动之间保留的东西吗?我可以/应该在不写入光盘的情况下做这件事吗?” (关于性能的注意事项:任何时候你必须去光盘的东西,预计会花费更长的时间)

NSUserDefaults 非常适合应用设置之类的事情。您的应用是否有多种配色方案可供用户选择?将这些首选项存储在用户默认值中并稍后查找。

我会将 NSUserDefaults 放在与其他通信模式不同的类别中,例如委托、通知、块、KVO、目标操作。

这是一篇关于 iOS 通信模式的精彩文章:http://www.objc.io/issue-7/communication-patterns.html。这将详细介绍每个人以及他们所做的事情,我发现他们的流程图非常有用。本文还讨论了 KVO(键值观察)和块(Swift 中的闭包)。

代表

两者之间的一个很大区别是流程图中的逻辑分支是接收者是否知道发送者。您经常会听到将通知称为一对多通信,而委派是一对一的通信。

通知:

【讨论】:

  • 感谢您的详尽回答和很棒的链接。我以前没见过这些流程图。
【解决方案2】:

通知用于向发送者未知的多个接收者广播消息。

委托用于将消息发送给代表发件人行事的单个已知收件人。

考虑到性能是一个好主意(委托对于少量通知对象更好,通知中心对于大量对象更好,或者是吗?运行分析器)但我认为一个更重要的因素,因为你在谈论目标-C 和不太可能谈论代码库中真正高性能的部分(可能是用 C 编写的)正在减少模块之间的编译时依赖性。

【讨论】:

    【解决方案3】:

    我在实施推送通知时需要对此进行解释。我想从堆栈上的顶部视图控制器或类似的东西执行视图控制器的转场。执行 segue 仅适用于视图控制器,其视图显示在屏幕上。

    delegate 和 NSNotification 这两种方式都适用于此目的。但是这两种方式都有用于此目的的流程(推送通知)。当应用程序发生流程时。完全关闭,没有任何视图控制器来通知接收推送通知的事件。为此,我使用了 NSUserDefaults。

    实际上,我确实将用户信息保存在用户默认值中,并通知每个视图控制器收到了通知。在我的主视图控制器(每个其他控制器都继承的控制器)中,我处理了 NSNotification 和 UserDefaults。

    我没有这么容易地提出这个解决方案。我在上面投资了一段时间。因此,如果这是您的问题,那将是我提出的解决方案。我不知道也许有人可以告诉我们一个更好的。我可以派他我的代表通过他通知我:)

    【讨论】:

      猜你喜欢
      • 2011-12-13
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      • 2011-02-08
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多