单例的设计与作用

单例模式:是指一个类如果设置为单例模式,那么这个类只能创建一个对象。而单例模式多数用于初始化时使用。单例的两大特性:1、可以保证对象的唯一性。2、可以保证线程的安全性。

下面创建一个单例模式的例子:

+(instancetype)shareInstance
{
    static SFDataBaseEngine *dbEngine = nil;
    static dispatch_once_t onceTocken;
    dispatch_once(&onceTocken, ^{
        dbEngine = [[self alloc]init];
    });
    return dbEngine;
}
需要注意的是:这个方法必须是一个静态方法(也就是类方法)。

1.第一行:是创建一个静态的空对象;第二行:定义一个“令牌”;当第三行执行的时候,如果这个令牌为空,则执行block块里面的代码,如果该令牌不为空,则直接跳转到下面的return语句。从而保证该类只创建一个对象。

2.这里需要注意的一点是:第一行和第二行必须保证是一个静态变量或者是全局变量,否则就会创建多个对象,也就不能保证该类的对象唯一性。那么也就不能够称之为单例了。

3.因为单例都是静态方法,所以只能够用类来调用。


使用单例的情况:a.当需要存储一个全局的属性,并且这个属性是在一个类创建的时候调用的。

     b.当一个类创建对象时需要占用很大的内存,这时就需要创建一个单例对象,因为否则的话每一次就创建一个新的对象,而这个对象又占用很大的内存。


4.iOS最经典的一个单例模式是UIApplication的单例模式。

static UIApplication * application = nil;

+(UIApplication*) shareApplication{

    if(application == nil){

        application= [[UIApplication alloc]init];

    }

    return application;

}

返回UIApplication的一个单例,单例是全局的;

UIApplication 代表的是应用程序做的事,每个程序只能有一个,系统使用的是单例模式,就是上面的[UIApplication sharedApplication]来得到一个实例。

在应用中,UIApplication *application = [UIApplication sharedApplication];就是实例化一个application对象。其中[UIApplication sharedApplication]就是实例化一个UIApplication单例对象。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值