写单例,看完这个就够了

单例模式的作用可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问,从而方便地控制了实例个数,并节约系统资源。单例模式在ARC\MRC环境下的写法有所不同,需要编写2套不同的代代码,因为作者在写此博客的时候,MRC已经非常少用了,所以这里只提供了在ARC模式下的单例书写方式。下面直接上代码;

Person.m中的实现
static Person *_person;
//static关键字的作用有两个,显然在此的作用是下面作用的第一个。
//static作用于变量时,该变量只会定义一次,以后在使用时不会重新定义,当static作用于全局变量时说明该变量只能在当前文件可以访问,其他文件中不能访问;
//static作用于函数时与作用于全局变量类似,表示声明或定义该函数是内部函数(又叫静态函数),在该函数所在文件外的其他文件中无法访问此函数;

//当用户使用alloc init方法创建实体类是,也可以保证所创建的事例对象是同一个。
+ (instancetype)allocWithZone:(struct _NSZone *)zone
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _person = [super allocWithZone:zone];
    });
    return _person;
}
//用类方法创建类的实体,方便外界使用。
+ (instancetype)sharedPerson
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _person = [[self alloc] init];
    });
    return _person;
}

//重写copyWithZone方法,可以保证用户在使用copy关键字时,创建的类的实例是同一个。
- (id)copyWithZone:(NSZone *)zone
{
    return _person;
}

当然Person.h中需要
+ (instancetype)sharedPerson;接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值