Swift写好一个单例

新项目要上Swift了虽然一直在期待,但等到真正用的时候,哎,你懂的。

今天我们要实现一个最基础的设计模式中单例,分为一下几种:

// MARK: -单例1 最简单最便捷的方案,由于历史原因,曾经是非线程安全的,但是现在是了。理论上这是最佳实践

static let shared1Instance = JSBUserInfoManager()

// MARK: -单例2 第一种方案的思想的保险实践,也是兼容Swift历史迭代的产物。

class var shared2Instance:JSBUserInfoManager{
struct Static {
static let instance = JSBUserInfoManager()
}
returnStatic.instance
}

// MARK: -单例3 目前Swift3是移除了dispatch_once_t,进一步验证了不需要自己实
现OC那样的单例。

class var shared3Instance:JSBUserInfoManager{
struct Static {
static var onceToken:dispatch_once_t
static var instance:JSBUserInfoManager? =nil
}

dispatch_once(&Static.onceToken) {
Static.instance = JSBUserInfoManager()
}
returnStatic.instance!
}

// MARK: -单例4 这个是非线程安全的,如果不需要多线程可以用,但是谁能笃定不需要呢?

private static var shared4:JSBUserInfoManager? =nil
class func shared4Instance() ->JSBUserInfoManager{
if(shared4 ==nil) {
shared4 = JSBUserInfoManager()
}
returnshared4!
}

// MARK: -单例5 这个是Swift3的最佳实践了,仔细看看UIApplication貌似就这么做的。

protocol Singleton:class{
static var shared5Instance:Self{get}
}
final class DemoSingle:Singleton{
static let sharedInstance = DemoSingle()
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在使用swift编程语言进行iOS应用开发的时候,我们常常借助单例来进行状态管理,但由于实现单例的方法很多,问题就...
    突然自我阅读 639评论 0 0
  • 在之前的帖子里聊过状态管理有多痛苦,有时这是不可避免的。一个状态管理的例子大家都很熟悉,那就是单例。使用Swift...
    Tank丶Farmer阅读 6,407评论 0 5
  • 尽管在我之前的博文里我就写过关于管理状态的那些坑,但是有时候我们就是无法避免它们。其中一类管理状态的方式我们耳熟能...
    一黑阅读 312评论 0 1
  • 单例:意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单...
    CoderZS阅读 613评论 1 13
  • 一 、OC中单例的写法:1.普通单例的写法 2. 利用多线程来写单例 #pragma mark --- 普通单例写...
    天涯海角我爱你阅读 1,787评论 0 3