Objective-C 单例实现

Objective-C中用的最多的设计模式就是单例,它最常见的实现如下:

+ (WPXXService *)sharedInstance {
    static WPXXService *g_service = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        g_service = [[WPXXService alloc] init];
    });
    return g_service;
}

单例,顾名思义,即有且只有一个实例。那么创建函数(sharedInstance)被多次调用,以及多线程场景下,如何保证这一点?这里充分利用了static的特性,static变量只会被初始化一次,之后的函数调用会使用变量上一次的值,而不会重新创建一个,g_service和onceToken都只有一个。另外,对于一个onceToken(理解为票据),dispatch_once的block只会调用一次。当然,这里也可以用锁实现。

 

posted @ 2018-09-07 11:17  happyyoung  阅读(439)  评论(0编辑  收藏  举报