使用 Objective-C/Swift 单例模型,为啥我们要创建共享实例而不只是使用类方法? [复制]

Posted

技术标签:

【中文标题】使用 Objective-C/Swift 单例模型,为啥我们要创建共享实例而不只是使用类方法? [复制]【英文标题】:With the Objective-C/Swift Singleton model, why do we create a shared instance and not just use class methods? [duplicate]使用 Objective-C/Swift 单例模型,为什么我们要创建共享实例而不只是使用类方法? [复制] 【发布时间】:2014-07-01 16:58:13 【问题描述】:

似乎我们总是使用sharedInstance 类变量来访问单例并在其上执行方法。但是为什么我们不把所有的操作类方法都做成,根本没有变量来处理呢? [SingletonClass uploadFile:(NSFile *)file] 而不是 [[SingletonClass sharedInstance] uploadFile:(NSFile *)file](或 Swift 等价物)。

变量带来什么好处?还是我只是忽略了单例中一些非常完整的概念,没有变量会阻止?

此外,是什么阻止了这个变量被内存释放?我知道它只创建过一次,但为什么它从来没有被删除?

【问题讨论】:

提供一个指向之前提出的问题的链接怎么样? 【参考方案1】:

如果您需要能够存储状态,您可以创建一个共享实例。如果您可以只使用类方法,那绝对是可取的。您的应用程序中的状态越少,尤其是单例,您创建的错误就越少。

【讨论】:

确实,如果你不共享状态,甚至类函数都不需要——一个简单的函数(在类之外)就可以了。 @Grimxn 类方法通常可以很好地分离关注点和可发现性 什么阻止变量在某个时候被释放? @DougSmith,你总是有一个对它有强引用的静态变量。

以上是关于使用 Objective-C/Swift 单例模型,为啥我们要创建共享实例而不只是使用类方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C Swift 桥接头

Objective-C Swift 桥接头

在同个工程中使用 Swift 和 Objective-C(Swift 2.0更新)-b

Using Swift with Cocoa and Objective-C(Swift 2.0版):开始--基础设置-备

Objective-C:Swift Package 函数中的多参数方法语法

相交节点 ---- Objective-C - Swift - iOS - SpriteKit 节点