静态函数和单例类在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资源等)。
static
和singleton
之间的主要区别是Singleton
可以实现Protocols
并从一些基类派生。 在Singleton
情况下,类可以被实例化,但只有一次。 Static
函数可以直接使用而不需要实例化。
所以如果你想为实用方法创build类,它应该是一个具有静态工具函数而不是单例的类。 静态和单例类都可以实现线程安全。