• THE RIGHT WAY TO WRITE A SINGLETON


    A TRIP DOWN MEMORY LANE

    @interface Kraken : NSObject
    @end
    
    @implementation Kraken
    
    + (instancetype)sharedInstance {
        static Kraken *sharedInstance = nil;
        static dispatch_once_t onceToken;
    
        dispatch_once(&onceToken, ^{
            sharedInstance = [[Kraken alloc] init];
        });
        return sharedInstance;
    }
    
    @end

     

    THE UGLIEST WAY (A.K.A. THE "WHY ARE YOU STILL CODING IN SWIFT IF YOU'RE JUST GOING TO DO THIS" WAY)

    class TheOneAndOnlyKraken {
        class var sharedInstance: TheOneAndOnlyKraken {
            struct Static {
                static var onceToken: dispatch_once_t = 0
                static var instance: TheOneAndOnlyKraken? = nil
            }
            dispatch_once(&Static.onceToken) {
                Static.instance = TheOneAndOnlyKraken()
            }
            return Static.instance!
        }
    }

     

    THE STRUCT WAY (A.K.A. THE "OLD BUT STRANGELY STILL POPULAR" WAY) 

    class TheOneAndOnlyKraken {
        class var sharedInstance: TheOneAndOnlyKraken {
            struct Static {
                static let instance = TheOneAndOnlyKraken()
            }
            return Static.instance
        }
    }

     

    THE GLOBAL VARIABLE WAY (A.K.A. THE "ONE LINE SINGLETON")

    private let sharedKraken = TheOneAndOnlyKraken()
    class TheOneAndOnlyKraken {
        class var sharedInstance: TheOneAndOnlyKraken {
            return sharedKraken
        }
    }

     

    THE RIGHT WAY A.K.A. "THE ONE LINE SINGLETON (NOW WITH PROOF!") 

    class TheOneAndOnlyKraken {
        static let sharedInstance = TheOneAndOnlyKraken()
    }

     

    DON'T FORGET THE PRIVATE INIT!

    class TheOneAndOnlyKraken {
        static let sharedInstance = TheOneAndOnlyKraken()
        private init() {} //This prevents others from using the default '()' initializer for this class.
    }

    FROM: http://krakendev.io/blog/the-right-way-to-write-a-singleton

  • 相关阅读:
    MySQL的语句执行顺序
    mysql 基本使用
    spring 事务详解
    java 设计模式
    hibernate 简单查询
    qwq(一些有趣的数学题)
    关于libra9z
    HDU6756 Finding a MEX
    CF1386C Joker
    CF1340F Nastya and CBS
  • 原文地址:https://www.cnblogs.com/newBlash/p/4882650.html
Copyright © 2020-2023  润新知