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;

}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章