单例模式

今天和大家分享一下ios中常用的单例模式。

首先解释一下什么叫做单例,顾名思义,单例就是在程序中只有这么一个实例对象,专业点就是说对象只初始化一次。

单例模式主要有两种:

第一种,

+ (id)sharedInstance
{
    static ViewController *instance = nil;
    @synchronized(self)
    {
        if (!instance) {
            instance = [[ViewController alloc] init];
        }
    }
    return instance;
} 
使用这个方法创建单例主要注意一下,@synchronized()关键字,其作用是多线程保护。也就是说在多线程的情况下,如果同时调用这个单例方法并且这个实例是第一次初始化,那么就会导致创建出两个实例,而加上@synchronized()关键字恰好可以避免这种情况。


第二种,

+ (id)sharedInstance
{
    static ViewController *instance = nil;
    static dispatch_once_t once;
    dispatch_once(&once,^{
        instance = [[ViewController alloc]init];
    });
    return instance;
}

使用这种方式创建单例,是在GCD机制出现之后。void dispatch_once(dispatch_once_t*predicate,dispatch_block_tblock );

解释:Executes a block object once and only once for the lifetime of an application.意思是说在应用程序的整个生命周期期间,代码块里面的代码只执行一次。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值