dispatch_once的实现原理
+ (instancetype)sharedInstance
{
/*定义相应类实例的静态变量;
意义:函数内定义静态变量,无论该函数被调用多少次,
在内存中只初始化一次,并且能保存最后一次赋的值
*/
static ClassName *instance = nil;
/*定义一个dispatch_once_t(其实也就是整型)静态变量,
意义:作为标识下面dispatch_once的block是否已执行过。
static修饰会默认将其初始化为0,当值为0时才会执行block。
当block执行完成,底层会将onceToken设置为1,这也就是为什
么要传onceToken的地址(static修饰的变量可以通过地址修改
onceToken的值),同时底层会加锁来保证这个方法是线程安全的
*/
static dispatch_once_t onceToken;
/*只要当onceToken == 0时才会执行block,否则直接返回静态变量instance*/
dispatch_once(&onceToken, ^{
instance = [[ClassName alloc] init];
//...
});
return instance;
}
本文标题:dispatch_once的实现原理
本文链接:https://www.haomeiwen.com/subject/rfocyhtx.html
网友评论