iOS主要知識總結--單例模式

單例模式的實現

單例是一種很常見的模式,它的原理就是使程序運行過程中,某個類只有一個實例,無論以什么方式創建,都返回同一個實例化對象。它的具體實現代碼如下所示:

@implementation WJTool

//提供一個static修飾的全局靜態變量,這句代碼保證了單例的生命周期是整個函數
static WJTool *_instance;

//alloc內部會調用這個方法
+(instancetype)allocWithZone:(struct _NSZone *)zone{
   //之前普遍的寫法,但是并不能保證線程安全
    /*
    @synchronized (self) {
        if (_instance==nil) {
            _instance = [super allocWithZone:zone];
        }
    }   */

    //為了既能使創建實例的代碼只執行一次,并且保證線程安全,這里使用GCD的一次性函數最好不過
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance=[super allocWithZone:zone];
    });
    return _instance;
}

//一般情況下,工具類都會提供一個類方法來供外界調用
+(instancetype)shareTool{
    return [[self alloc]init];
}


//嚴謹起見,重寫copyWithZone和MutableCopyWithZone方法
-(id)copyWithZone:(NSZone *)zone{
    return _instance;
}

-(id)mutableCopyWithZone:(NSZone *)zone{
    return _instance;
}

單例的簡潔實現:

在開發中,為了提高編碼效率,并且這個單例是自己在已知的情況下調用,可以采用簡單的方法實現:

+(instancetype)shareTool
{
    static WJTool *_instance;

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{
        _instance = [[self alloc]init];
    });

    return _instance;
}
xcode.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容