iOS 单例模式的使用

单例有什么用?单例就是说在程序运行过程中逻辑上保持唯一性的对象。什么时候会用到单例呢,几乎所有工程都应该用到单例,因为不论任何程序在设计的时候都需要设计自己的model层,模型会有很多但是肯定需要一个模型代表自己的程序本身,然后引用一大堆程序本身唯一的东西,比如程序当前的用户信息,当前的缓存信息,甚至是程序主要数据结构的基础对象,比如做一个电子书应用,书库肯定是一大堆书的信息,那么书库本身就是唯一的,我在程序很多地方都需要对书库进行操作,比如入库,比如出库比如和网络书库同步刷新,又比如缓存书库里的内容,我需要一个全局的并且唯一的对象,那么就应该用单例

static BookStore* aSharedBookStore = nil; // implement static instance
 
+(BookStore *) sharedBookStore{
    @synchronized(self){
        if (aSharedBookStore == nil) {
           aSharedBookStore = [[self alloc] init];
        }
    }
    return aSharedBookStore;
}

这里要提到@synchronized(){}, 这个是一个互斥锁,说起这个就要讨论另一个复杂庞大的部分,多线程,和线程同步,别的日志再写。

在这里这么写就是为了保证单例的创建过程是唯一的,执行一次之后就再不执行了,因为多线程的问题,一段代码可能会在多个线程中被同步执行,如果不做互斥锁就会引起singleton的对象被创造多个,那么就失去单例的意义了。

另一个要提到self,self是iOS动态特性的一个体现,self会在运行时进行检查,决定self是代表自身还是self.class, 所以你会发现在静态方法(类方法中)self 可以直接调用其他类方法。而在动态方法中 self又可以调用成员方法,所以某些条件下self和[self class]等效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值