oc和swift类型的单例


    static let sharedTools3 = SoundTools()

    

    override init() {

        print("创建")

            super.init()

    }

    

    // 静态区的对象只能设置一次数值

    // Swift 中的的单例写法和懒加载几乎一样 `static let`

    // 同样也是在第一次使用时,才会创建对象

    static let sharedTools2: SoundTools = {

       

        print("创建声音对象")

        

        return SoundTools()

    }()

     

    // 以下代码仿 OC 的写法!

    // Swift 中不允许在函数中定义静态成员

    static var instance: SoundTools?

    

    static var onceToken: dispatch_once_t = 0

    

    // 1. 提供全局的访问点

    class func sharedTools() -> SoundTools {

        

        dispatch_once(&onceToken) { () -> Void in

            instance = SoundTools()

        }

        

        return instance!

    }

}

////////////////////////////////


// 面试的时候,手写单例就写以下部分即可!

+ (instancetype)sharedTools {

    static id instance;

    

    // dispatch_once {

    //      instance = [[self alloc] init];

    // }

    // 如果为 0,就执行 block 中的代码!

    static dispatch_once_t onceToken;

    

    NSLog(@"---> %ld", onceToken);

    

    dispatch_once(&onceToken, ^{

        instance = [[self alloc] init];

    });

    

    return instance;

}




你可能感兴趣的:(oc和swift类型的单例)