/**
1. 重写allocWithZone,用dispatch_once实例化一个静态变量
2. 写一个+sharedXXX方便其他类调用
*/
// 在iOS中,所有对象的内存空间的分配,最终都会调用allocWithZone方法
// 如果要做单例,需要重写此方法
// GCD提供了一个方法,专门用来创建单例的
+ (id)allocWithZone:(struct _NSZone *)zone
{
static DemoObj *instance;
// dispatch_once是线程安全的,onceToken默认为0
static dispatch_once_t onceToken;
// dispatch_once宏可以保证块代码中的指令只被执行一次
dispatch_once(&onceToken, ^{
// 在多线程环境下,永远只会被执行一次,instance只会被实例化一次
instance = [super allocWithZone:zone];
});
return instance;
}
+ (instancetype)sharedInstance
{
return [[self alloc] init];
}iOS 单例
最新推荐文章于 2019-05-17 10:05:23 发布
本文介绍了如何使用GCD(Grand Central Dispatch)在iOS中实现单例模式的高效实例化过程,通过重写allocWithZone方法和利用dispatch_once确保线程安全,以及提供一个方便调用的sharedInstance方法,简化了单例对象的获取。
312

被折叠的 条评论
为什么被折叠?



