ios oc 和 swfit 用dispatch_once 创建单例

网上已经有方法了,我这里就是抄了下,原文链接

http://bj007.blog.51cto.com/1701577/649413

http://blog.csdn.net/u010124617/article/details/28856711?utm_source=tuicool

这里的dispatch_once_t就是一个用于标记的整型,没什么特殊之处。

用dispatch_once实现单例的最大好处就是线程安全!!这个经常会被面试问到,建立数据库和网络操作的单例时,确实存在线程安全问题。

先看oc的

+ (AccountManager *)sharedManager { 
    static AccountManager *sharedAccountManagerInstance = nil; 

    static dispatch_once_t predicate; dispatch_once(&predicate, ^{       
          sharedAccountManagerInstance = [[self alloc] init]; 
    });

    return sharedAccountManagerInstance; 

}

再看swfit的,这里使用了内部的struct是因为目前swift的class中不支持static定义类属性。

class SwiftSingleton{
    class func shareInstance()->SwiftSingleton{
        struct YRSingleton{
            static var predicate:dispatch_once_t = 0
            static var instance:SwiftSingleton? = nil
        }
        dispatch_once(&YRSingleton.predicate,{
                YRSingleton.instance=SwiftSingleton()
            }
        )
        return YRSingleton.instance!
    }
}

 

posted @ 2015-04-08 10:29  幻化成疯  阅读(327)  评论(0编辑  收藏  举报