我知道两种方式。什么是更好的?还有什么比2种方法更好的方法吗?

+ (MyClass *)shared {
    /*
    static MyClass *sharedInstance = nil;

    @synchronized(self) {
        if (sharedInstance == nil) {
            sharedInstance = [[self alloc] init];
        }
    }
    return sharedInstance;
    */

    /*
    static dispatch_once_t pred;
    static MyClass *sharedInstance = nil;

    dispatch_once(&pred, ^{
        sharedInstance = [[self alloc] init];
    });

    return sharedInstance;
    */
}

最佳答案

这是设置共享实例的另一种方法。线程安全由运行时处理,并且代码非常简单。通常这就是我设置单身人士的方式。如果单例对象使用了大量资源,但可能没有使用,那么dispatch_once方法效果很好。

static MyClass *sharedInstance = nil;

+ (void) initialize
{
   sharedInstance = [[MyClass alloc] init];
}

+ (MyClass*)sharedInstance
{
    return sharedInstance;
}

10-08 17:47