iOS巔峯之單利用法

運用場景:

1. 有一個全局的實例化的類方法

 2. 保存在靜態區,單例的生命週期和應用程序一樣長

 3. 內存中有且只有一個副本/對象/實例,指保存一份

用法:

1.GCD實現單利

+ (instancetype)sharedInstance {

    static InstanceClass *_shareInstance = nil;

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        _shareInstance = [[super allocWithZone:NULL] init];

    });

    return _shareInstance;

}

2.靜態變量實現單利

+ (instancetype)sharedInstance {

    static InstanceClass *_shareInstance = nil;

    @synchronized (self) {

        if (!_shareInstance) {

            _shareInstance = [[super allocWithZone:NULL] init];

        }

    }

    return _shareInstance;

}

3.

+ (instancetype)sharedInstance {

    static InstanceClass *_shareInstance = nil;

    if (!_shareInstance) {

        _shareInstance = [[super allocWithZone:NULL] init];

    }

    return _shareInstance;

}

上面方法和這個是對應的

+ (instancetype)allocWithZone:(struct _NSZone *)zone {

    return  [self sharedInstance];

}

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