OC_SingleTon(单例)

1、单例:  表示在一个应用的生命周期中,类的对象只能被实例化一次,也就是说一个类只能有这样的一个对象。

2、作用:因为在一个应用中,一个类只有这一个单例对象,所以不管在A还是B还是。。。。中,只要实例化出来,都是同样的一个对象,所以我们可以通过这个对象来进行传值

            (举例:这个对象N个属性,其中一个属性是游戏中人物等级,我们在A中给这个对象的等级属性赋值为10级,那么不管到任何地方,只要实例化出来这个对象,他的等级属性的值就都是10级,我们可以取出来使用)


3.创建单例

.H文件

//公开单例类的单例方法,在使用时只通过下面的方法来开辟空间,实例化对象,单例不用alloc来申请内存

//看见shareInstance或者defaultXXXX等就可以认为这是一个单例方法(大致为约定俗成的一种写法)

+(SingleClass*)shareInstance;

@end   



.M文件

//一下单例的实现最好能背下来,要能手写出来,在众多面试中 这也是会被要求到的点

1、做一个静态全局指针变量

static SingleClass *single = nil;

@implementation SingleClass

+(SingleClass*)shareInstance

{

   2、调用GCD(多线程的写法)的dispatch_once方法来只做单例,回车,整个单例方法就出来了

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

  3、把上面的静态全局变量赋值,进行实例化,大括号中的代码在整个应用中只会被执行一次

        single = [SingleClass alloc];

    });

  4、把静态全局指针变量返回

    return single;

}

@end


4.方法的调用实现

SingleClass *singleOne = [SingleClass shareInstance];//用单例方法做一个对象

singleOne.name = @"one";//赋值one


SingleClass *singleTwo = [SingleClass shareInstance];//用单例方法做一个对象

这时候并没有给singleTwo.name赋值,但是依然可以取出他的值,(one)

  因为使用了单例的方法,创建出来的singleOnesingleTwo其实是同一个对象(因为在单例方法中,开辟空间的代码只被执行过一次)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值