block与GCD--45:dispatch_once

2023-11-22 08:31:51 浏览数 (2)

代码语言:javascript复制
  (instancetype)sharedInstance{
    static Student *stu = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        stu = [[Student alloc]init];
    });
    return stu;
}

使用dispatch_once的注意事项:

  • 此函数接收类型为dispatch_once_t的特殊参数,还有一个块参数。对于onceToken标记,该函数保证相关的块必定会执行,且执行一次。此操作完全是线程安全的
  • 对于在dispatch_once中的创建的实例对象必须确保其只有一个,所以使用static修饰

注意:对于只执行一次的块来说,对于传入函数的标记参数必须完全相同,因此,开发时需要将标记变量声明在static或global作用于中。

0 人点赞