使用GCD的dispatch_once在Objective-C中创建单例模式。

17 浏览
0 Comments

使用GCD的dispatch_once在Objective-C中创建单例模式。

如果您的目标是iOS 4.0或更高版本

使用GCD,在Objective-C中创建单例(线程安全),这是最好的方法吗?

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

admin 更改状态以发布 2023年5月24日
0
0 Comments

instancetype

instancetype只是许多语言扩展之一,每次新发布都会添加更多扩展。

了解它,热爱它。

并将其作为一个例子,展示如何关注低级详情可以为您提供将Objective-C转换为强大新方法的见解。

参考此处:instancetype


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


+ (Class*)sharedInstance
{
    static dispatch_once_t once;
    static Class *sharedInstance;
    dispatch_once(&once, ^
    {
        sharedInstance = [self new];
    });    
    return sharedInstance;
}

0
0 Comments

这种方式是创建一个类实例的完全可接受且线程安全的方式。 从技术上讲它可能不是一个“单例”(只能有一个这样的对象),但只要你只使用[Foo sharedFoo]方法来访问对象,那就足够了。

0