静态函数和单例类在swift中的区别

我想创build一个类,其中将在整个应用程序将使用的所有实用工具方法。
问题:1
创build一个单例类并保留所有必要的方法是很好的,或者我应该创build一个所有函数都应该是静态的类。
问题:2
两者之间的主要区别是什么?
问题:3
它将如何影响iOS的性能?

当然这听起来很混乱,可以辩论。 但是,从最佳做法,我可以提出一些build议。

单例通常用于创build一个资源密集的和一个计时器初始化例如:数据库连接器,login处理程序等。

工具类是只有静态函数和variables的类。 它不应该处理像打开数据库连接器那样的asynchronous任务和昂贵的资源处理。

在你的情况下,如果公用事业是在做一些资源密集型的过程,最好用一个单身包装。 如果没有,那么在我看来,在一个类中的静态函数更好。 这也是因为,Swift会使用静态调度调度一个类中的所有静态函数。 尽pipeSwift喜欢优化,但在Singleton中却不行。

就使用Objective-C运行时而言, Static Dispatch比Dynamic Dispatch快4倍 。 这对于快速也是如此。 但是,发送Dynamiclly只需要4纳秒。

我希望这能让你清楚。

可以说我们有两个class。

包含所有静态方法和静态variables的类通过这种方式,您可以在不实例化对象的情况下访问类方法。 另外如果需要一些小数据句柄,它们可以存储在静态variables中。 所有访问这个类的线程都不会创build数据variables的重复实例。

Singleton类这个类将有一个私有的init方法,通过一个静态实例共享一个实例。 所有访问实例的线程都不会创build数据variables的重复实例。

所以在技术上,这两者听起来都非常类似于您的Utility类的场景,并且可能会因为做出决定而感到困惑,您可以使用以下用例做出决定。

  • 这个类主要定义逻辑实现吗? 如果类方法的主要目的是提供逻辑计算/操作或不需要将数据存储在临时句柄之外的variables中,则应始终select静态类。 例如你在这里提到的Utility类。 像调整图像大小,读取文件,parsing数据结构等工具方法最好使用静态方法。

  • 如果您的课程需要将重要信息存储在多个variables中,那么限制资源访问(例如,限制数据库同时执行的事务数或限制同时发生的networking调用次数),频繁分配和取消分配资源(在运行时pipe理内存)使用Singleton类(例如用于访问数据库结构的类,pipe理networking资源等)。

staticsingleton之间的主要区别是Singleton可以实现Protocols并从一些基类派生。 在Singleton情况下,类可以被实例化,但只有一次。 Static函数可以直接使用而不需要实例化。

所以如果你想为实用方法创build类,它应该是一个具有静态工具函数而不是单例的类。 静态和单例类都可以实现线程安全。