iOS swift单例模式

普通的写法:

class SwiftSingleton {  
    class var shared: SwiftSingleton {  
    if !Inner.instance {  
        Inner.instance = SwiftSingleton()  
        }  
        returnInner.instance!  
    }  
       
    structInner {  
        staticvar instance: SwiftSingleton?  
    }  

但系统多个线程在执行,这种情况下就会创建多个实例,没有保证实例的唯一性。也可以修改成另外一种方式:










class SwiftSingleton {
    classvar shared: SwiftSingleton {
            returnInner.instance
    }
 
    struct Inner {
        static let instance: SwiftSingleton = SwiftSingleton()
    }

}


首次访问Inner.instance时才会创建SwiftSingleton,不会创建多个对象,但是这样返回对象是想修改重新获取也不好操作。

因此可以使用GCD来实现:

class SwiftSingleton {
    classvar shared: SwiftSingleton {
        dispatch_once(&Inner.token) {
            Inner.instance = SwiftSingleton()
        }
        return Inner.instance!
    }
    struct Inner {
        static var instance: SwiftSingleton?
        static var token: dispatch_once_t = 0
    }
     
}

















郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。