代码语言: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作用于中。