單例類

#import <Foundation/Foundation.h>

@interface Single : NSObject
@property (nonatomic,copy)NSString *value;
+(Single *)SingleModel;
@end

#import "Single.h"
@implementation Single
static Single *single =nil;
+ (Single *)SingleModel
{
    //block內(nèi)代碼只會被執(zhí)行一次 是否被執(zhí)行 是由once來記錄
    static dispatch_once_t once;
        dispatch_once(&once, ^{
            single =[[Single alloc] init];
        });
    return single;
}
+ (id)allocWithZone:(struct _NSZone *)zone
{
    static dispatch_once_t once;
    dispatch_once(&once, ^{
        single =[super allocWithZone:NULL];
    });
    return single;
}

另外 兩種加鎖方式

@implementation Single
static Single * single =nil;
+ (Single *)SingleModel
{
    //@synchronized 資源保護(hù)鎖 防止多線程操作時 對同一資源訪問時造成資源混亂而設(shè)定的
    //()標(biāo)示符 代表類  或者使用對象類型  一般使用self
    @synchronized (self)
    {
        if (single==nil)
        {
            single =[[Single alloc] init];
        }
    }
    return single;
}
+ (id)allocWithZone:(struct _NSZone *)zone
{
    //NSLock 一種加鎖的形式 和 @synchronized (self)效果一樣
    if (single ==nil)
    {
        NSLock *lock =[[NSLock alloc] init];
        //[lock lock]和[lock unlock]之間的代碼就是要保護(hù)的資源
        [lock lock];
        single = [super allocWithZone:NULL];
        [lock unlock];
    }
    return single;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容