在迅速静态函数和单个类之间的差异[关闭](Difference between static fun

2019-09-30 15:05发布

我想创建一个类,所有的实用方法将被保留,这些方法将整个应用程序中使用。
问题:1
它的好处是创建一个单独的类并保留所有必要的方法有,或者我应该创建一个类的所有功能将是静态的。
问题:2
是什么在迅速上述两种方法之间的主要区别?
问题:3
如何将iOS中影响性能?

Answer 1:

当然这听起来很混乱,可以进行辩论。 然而,从最佳实践我可以把一些建议。

辛格尔顿通常用于创建实例的资源密集型和一个定时器初始化:一个数据库连接,登录处理程序和这样。

实用类是类,只有静态函数和变量。 它不应该处理异步任务和昂贵的资源处理像打开一个数据库连接。

在你的情况下,如果实用程序做一些资源密集的过程它能够更好地在一个单独包装。 如果没有,那么在一个类的静态函数是在我看来更好。 之所以如此也是因为,斯威夫特将使用静态调度调度类中的所有静态函数。 鉴于此,虽然斯威夫特喜欢优化不能在辛格尔顿是真实的。

静态调度比动态调度快4倍 ,只要Objective-C运行时使用。 这是真正的迅速过。 然而,只用了4纳秒派遣Dynamiclly。

我希望这是你清楚。



Answer 2:

比方说,我们有两个班。

类的所有静态方法和静态变量这样你就可以访问类的方法,而实例化对象。 此外,如果需要一些小的数据拉手可以将它们存储在静态变量。 访问本类的所有线程不会最终创建数据变量的重复的实例。

辛格尔顿类此类将有一个私人init方法,并通过静态实例共享一个实例。 访问该实例的所有线程都不会最终创建数据变量的重复的实例。

因此从技术上讲两者听起来你的一个实用工具类的情况非常相似,它可能会比较混乱做出决定,你可以使用下面的使用情况做出决定。

  • 这是否主要类定义逻辑实现? 如果类方法的主要目的是提供逻辑运算/操作或操作不要求在临时外把手变量存储数据,那么你应该总是选择一个静态类。 对于如公用事业类,你在这里提及。 像调整图像大小,读取文件,解析数据结构的实用方法,最好使用静态方法来完成。

  • 如果你的类需要存储在多个变量的重要信息,限制资源访问(同时交易的例如限制数量的数据库或限制的同时网络电话号码),它经常分配并释放资源(管理在运行时内存),那么它最好使用单例类(例如类用于访问分贝结构,管理网络资源,等等。)



Answer 3:

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

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



文章来源: Difference between static function and singleton class in swift [closed]