ios单例模式实现的两种方式

一、使用dispatch_once();

变量使用static,一是因为在block中修改变量的引用时,变量只能是block变量或者是static静态变量,static在函数内部使用,多次执行该函数,只分配一份内存存储区。

+(NetWorkManager *)sharedInstance  
{  
    static NetWorkManager*networkManager;  
    static dispatch_once_tonceToken;  
    dispatch_once(&onceToken, ^{  
       networkManager = [[NetWorkManageralloc] init];  
    });  
    return networkManager;  
}  

dispatch_once()函数用来标记函数内的代码只执行一次。

二、通过类方法和static变量来实现

static MySingleton *singleton = nil;//使用静态变量,供方法使用
+(MySingleton *)sharedInstance
{
    @synchronized(self)//线程安全
    {
        if (singleton == nil) {
            singleton = [[super alloc]init];//使用super alloc,因为该类的allocWithZone被重写。
            //singleton = [[super allocWithZone:NULL] init];
        }
    }
    return singleton;
}

+ (id) allocWithZone:(NSZone *)zone //第三步:重写allocWithZone方法
{
    return [self sharedInstance];
}

- (id) copyWithZone:(NSZone *)zone //第四步
{
    return self;
}

以上两张方法都可以保证线程安全,方法二摘自ios设计模式解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值