线程安全对象的最佳单例模式

时间:2013-07-27 12:21:30

标签: objective-c multithreading cocoa

单身人士的最佳模式是什么?我经常使用

+ (SomeManager *)shared
{
    static SomeManager * _SomeManager = nil;
    if (_SomeManager) {
        return _SomeManager;
    }

    _SomeManager = [[SomeManager alloc] init];

    return _SomeManager;
}

这个帖子安全吗?如果没有,为了安全起见会很烫?

2 个答案:

答案 0 :(得分:1)

使用来自的示例 Create singleton using GCD's dispatch_once in Objective C

+ (id)sharedInstance
{
    static dispatch_once_t once;
    static id sharedInstance;
    dispatch_once(&once, ^{
        sharedInstance = [[self alloc] init];
    });
    return sharedInstance;
}

清晰简单。谷歌下次会更好。

答案 1 :(得分:0)

我更喜欢使用GCD dispatch_once方法......

+ (id) sharedSomethingManager
{
    static dispatch_once_t onceQueue;
    static SomethingkManager *somethingManager = nil;

    dispatch_once(&onceQueue, ^{somethingManager = [[self alloc] init]; });
    return somethingManager;
}