苹果通知可靠性

Apple notifications reliability

好吧,很明显推送通知并不总是可靠,如文档中所述。

如果我错了请纠正我,这仅仅是因为某人可能长时间没有互联网并且通知可能会过期或被替换,甚至由于某些宇宙原因而丢失。

我同意。

但作为一名初级程序员,我使用了很多本地通知,不是为了显示,而是在某些进程完成时调用不同的方法。

这是一个简单的例子,当应用程序启动时,我有一个数据更新过程,比如消息和东西。更新完成后(大约 3 秒后),我会发送一条通知,让我的所有控制器都收听,以便他们相应地更新 UI。如果我在主屏幕上,我会显示那些红色的小徽章,如果我在对话中,我会在表格视图中添加消息,等等。

而且,作为一名初级开发人员,我有机会与一位不喜欢这种风格的高级开发人员一起工作。他说这不可靠,我应该使用委托回调和完成处理程序。考虑到应用程序的构建方式,我发现很难做到这一点。我的系统从字面上看是单线的,而且从来没有失败过,而他的系统需要在每个单独的 class 中执行大量不同的方法。显得既多余又凌乱。

我终于到达了我想要的地方:本地通知是否可靠,我在说这个:

[[NSNotificationCenter defaultCenter] postNotificationName:NOTIF_SOMETHING_SOMETHING object:self];

显然是 addObserver: 对应的。

我选择这种工作方式真的错了吗?我应该怎么办?或者这样可以吗?还是那更棒?

遗憾的是,这是一个非常基于意见的问题,因为它是关于标准和良好做法的,但我觉得它不够广泛,不足以违反规则,因为我真的真的觉得有人会提出技术原因这个或那个should/shouldn还没有完成,或者澄清应该在何时何地使用什么。

无论如何,如果需要,请让我澄清任何事情,我对接下来的所有回复都很感兴趣,我很期待。

不要将 NSNotificationCenter 通知与本地(或远程)推送通知混淆。他们是完全不同的。

来自 NSNotificationCenter 的通知是可靠的。没有互联网用于这些。它们是在您的 运行 应用程序中进行的简单方法调用。它们与使用委托等其他形式一样安全。

当您只是想向应用程序广播发生了某事而不关心事件有谁知道或有多少听众时,使用 NSNotificationCenter 非常有用。

典型的委派模式通常仅在事件最多只有一个侦听器时才有效。

iOS 世界上有多种通知,每种都有不同的用途,不应相互混淆。

  1. 推送通知: 这些是唯一不可靠的,因为它们依赖于网络连接和苹果的推送系统......

  2. UILocalNotification: 这些是在某些事件发生时通知您的用户的方法(您可以将其与推送通知进行比较,只是它不是从服务器发送的,而是由您自己的应用程序在本地触发的)

  3. NSNotification: 这些纯粹是技术性的,基本上它们提供了一种广播机制,可用于启用应用程序某些部分之间的通信。我知道乍一看,在您的代码中经常使用 NSNotification 似乎很方便,因为这是让 2 个(或更多)类 相互通信的简单直接的方法。但是,您的高级开发人员是对的,他建议您不要过度使用此机制。主要是因为它会导致混乱的编码结构,并且当你的项目变大时不能很好地扩展。另一个大问题是它使调试变得非常困难。另一方面,当使用 delegates 或完成块时,您有机会以合理的方式构建代码,以确保您按应有的方式封装功能,使代码更具可读性并且更适合大规模使用的方式。