OC中单例的实现方法

来源:互联网 发布:模拟退火算法的优缺点 编辑:程序博客网 时间:2024/06/05 09:51

1.使用GCD:

(1)在.h文件中提供一个类方法,用于返回该类唯一的一个对象

+ (Person *)sharePerson;
(2)在.m文件中声明一个Static类型的对象,并将其置为nil,然后实现sharePerson和allocWithZone方法

// 静态全局变量static Person *person = nil;// 对外提供的获取单例的方法+ (Person *)sharePerson {    if (!person) {        person = [[self alloc] init];    }    return person;}// 防止用户alloc+ (instancetype)allocWithZone:(struct _NSZone *)zone {    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{        person = [super allocWithZone:zone];    });    return person;}
2.不使用GCD:

(1)在.h文件中提供一个类方法,用于返回该类唯一的一个对象

+ (Person *)sharePerson;
(2)在.m文件中声明一个Static类型的对象,并将其置为nil,然后实现sharePerson和allocWithZone方法

// 静态全局变量static Person *person = nil;// 对外提供的获取单例的方法+ (Person *)sharePerson {    <span style="color:#ff0000;">@synchronized</span>(self) {        if (person == nil) {            person = [[Person alloc] init];        }        return person;    }}// 防止用户alloc+ (instancetype)allocWithZone:(struct _NSZone *)zone {    <span style="color:#ff0000;">@synchronized</span>(self) {        if (person == nil) {            person = [super allocWithZone:zone];        }        return person;    }}
注:这两种方法都是线程安全的。






0 0
原创粉丝点击