Objective-C singleton GCD - [self alloc]或[class alloc]

时间:2015-09-29 19:02:35

标签: ios objective-c singleton

在介绍instance

之后,我正在研究Objective-C的现代模式来创建单身人士

来自:Create singleton using GCD's dispatch_once in Objective C

+ (instancetype)sharedInstance
{
    static dispatch_once_t once;
    static id sharedInstance;

    dispatch_once(&once, ^
    {
        sharedInstance = [self new];
    });

    return sharedInstance;
}

我想知道为什么不在下面使用[MyFunnyClass new]?

@implementation MyFunnyClass
+ (instancetype)sharedInstance
{
    static dispatch_once_t once;
    static id sharedInstance;

    dispatch_once(&once, ^
    {
        sharedInstance = [MyFunnyClass new];
    });

    return sharedInstance;
}

或者它是否相同?

(参考:http://nshipster.com/instancetype/

编辑:Why use [ClassName alloc] instead of [[self class] alloc]?给出的答案与此问题无关

2 个答案:

答案 0 :(得分:3)

在这种情况下,使用[self new]代替[MyClass new]并使用static id sharedInstance代替static MyClass *sharedInstance的原因是因为您只需复制并粘贴整个方法无需编辑。方法中没有任何内容特定于它所属的类。

答案 1 :(得分:0)

请参阅Why use [ClassName alloc] instead of [[self class] alloc]?

此外,惯例是使用alloc / init,而不是new。见alloc, init, and new in Objective-C