Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 什么是一次派遣_Objective C_Grand Central Dispatch - Fatal编程技术网

Objective c 什么是一次派遣

Objective c 什么是一次派遣,objective-c,grand-central-dispatch,Objective C,Grand Central Dispatch,有人能告诉我什么是派遣一次,它的意义 这是苹果在其文档中写的 用于dispatch_once函数的谓词 这不是我无法理解的 + (instancetype)sharedInstance { static JitsiMeet *sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstance = [[self all

有人能告诉我什么是派遣一次,它的意义

这是苹果在其文档中写的

用于dispatch_once函数的谓词

这不是我无法理解的

+ (instancetype)sharedInstance {
    static JitsiMeet *sharedInstance = nil;
    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{
        sharedInstance = [[self alloc] init];
    });

    return sharedInstance;
}

谁能给我解释一下吗?将上述代码作为参考?

调度一次的文档中
它采用一个参数
调度一次
,用于测试块是否已完成

因此,您的代码很容易解释:

  • 您只想初始化一次
    JitsiMeet
  • 您创建了一个令牌来检查您是否初始化了它,并将其命名为
    onceToken
  • 您调用了
    dispatch\u once
    ,它会检查
    dispatch\u once\u t
    的值。
    • 它继续初始化
      sharedInstance
    • 下次调用
      sharedInstance
      函数时,它会跳过初始化
      sharedInstance
  • dispatch\u once
    确保您永远不会返回
    nil

直接从“dispatch\u once”文档中,“predicate”指的是“指向dispatch\u once\t结构的指针,用于测试块是否已完成”。dispatch\u once\t在once.h到intptr\u t中键入def,这最终是一个很长的过程。关键是有一段内存是静态分配的,这就是dispatch_once Machineus使用的(它的固定地址,保证唯一)以线程安全的方式确定块是否已经发生。是“
init
函数”
sharedInstance
方法吗?
init
被多次调用吗?我的意思是,无论何时调用
sharedInstance
是,无论何时创建
类的一个实例
都会首先调用默认的
init
。因此,
init
函数是
[[self alloc]init]
中的
sharedInstance
方法,而不是
init
方法吗?