使用自定义委托与NSNotification对比NSUserDefaults状态

时间:2015-05-13 21:55:04

标签: ios objective-c

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

使用NSNotification与自定义委托与使用NSUserDefaults时我正在做的事情相比有什么好处和缺点?

我的问题专门用于解决使用NSUserDefaults给出状态与使用协议或NSNotificationCenter简单调用方法之间的任何性能或潜在问题。

3 个答案:

答案 0 :(得分:8)

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

NSUserDefaults适用于应用设置等内容。您的应用有多种颜色方案,用户可以选择吗?将这些首选项存储在用户默认值中,稍后再查找。

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

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

<强>代表

Delegate

两者之间的一个很大区别,即流程图中的逻辑分支,即收件人是否知道发件人。您经常会听到通知被称为一对多通信,其中委托是一对一的。

通知: enter image description here

答案 1 :(得分:1)

通知用于向发件人未知的多个收件人广播邮件。

委派用于向代表发件人的单个已知收件人发送邮件。

考虑到性能是一个好主意(对于少量通知对象更好地委派,更好地通知中心对于大量对象,或者是?运行探查器)但是我认为更重要的因素是因为你在谈论Objective -C并且不太可能讨论代码库中真正高性能的部分(可能用C语言编写),这减少了模块之间的编译时依赖性。

答案 2 :(得分:1)

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

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

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

我没有那么轻易地提供这个解决方案。我投入了一些时间。所以,如果这是你的问题,那将是我提出的解决方案。我不知道也许有人可以告诉我们一个更好的。我可以通过他告诉我我的代表:)