Objective-C中使用GCD的dispatch_once创建单例

2024-01-06

如果您可以定位 iOS 4.0 或更高版本

使用GCD,这是在Objective-C(线程安全)中创建单例的最佳方式吗?

+ (instancetype)sharedInstance
{
    static dispatch_once_t once;
    static id sharedInstance;
    dispatch_once(&once, ^{
        sharedInstance = [[self alloc] init];
    });
    return sharedInstance;
}

这是创建类实例的完全可接受且线程安全的方式。从技术上讲,它可能不是“单例”(因为这些对象中只能有 1 个),但只要您只使用[Foo sharedFoo]方法来访问对象,这已经足够了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Objective-C中使用GCD的dispatch_once创建单例 的相关文章

随机推荐

  • 服务在不同端口上运行的域的 SSL 证书

    我有一台服务器 在不同端口上运行不同的服务 例如 https 主机名 9000 com https hostname 9000 com或 wss hostname 4536 com 等 现在可以保护所有这些服务的单一正确 SSL 证书是什么
  • 提交消息中的 Change-Id 丢失时出现 Gerrit 错误

    我在远程存储库中设置了一个分支 并在该分支上进行了一些提交 现在我想将远程分支合并到远程主控 我的操作基本上如下 结帐分支 结帐大师 合并分支并修复合并错误 commit 推送原点 HEAD refs for master 但在第5步时出现
  • 如果项目存在于“禁止使用的单词”数组中,则从数组中删除该项目

    我有一个数组 Array 0 gt tom 1 gt and 2 gt jerry 我还有一个不允许的单词数组 Array 0 gt and 1 gt foo 2 gt bar 我需要做的是删除第一个数组中也出现在第二个数组中的任何项目 例
  • 将普通公钥转换为 PEM

    我已经使用 Prime 256v1 从受信任的应用程序生成了 EC 密钥对 并将公钥导出到普通操作系统 密钥大小为 65 字节 公钥采用纯格式 仅密钥十六进制 导出的公钥需要提供给图书馆 第三方 该库需要 PEM 格式的公钥 经过一段时间的
  • 如何使用java中的另一个堆栈反转堆栈[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 您好 我正在尝试使用另一个空堆栈来反转堆栈 我自己编码的堆栈 由于某种原因它无法正常工作 谁能帮我这个 public s
  • Thymeleaf 用变量构造 URL

    我有以下代码在我的控制器中设置变量 model set type type 在 thymeleaf 视图中 我想构建一个带有操作 url 的表单 mycontroller type 有什么想法如何实现这一目标 我读过百里香文档但没有运气 A
  • C# 局部变量初始化一次

    我认为我的问题是完全愚蠢的 但我必须知道答案 在这种情况下是否可以只初始化一个变量一次 static void Main while true MethodA MethodB private static void MethodA stri
  • PhpStorm 设置存储库不支持在没有 HEAD 的情况下提交存储库

    我正在尝试在 GitHub 上设置一个设置存储库 创建新的 GitHub 帐户和新存储库后 如果我在 PhpStorm 的 设置存储库 对话框中输入存储库上游 URL 我会收到以下错误消息 无法同步设置 当前不支持在没有 HEAD 的情况下
  • 为什么应该执行“sh -c a.out”而不是 a.out 本身?

    我正在研究Apple的实现popen at https opensource apple com source Libc Libc 167 gen subproj popen c auto html https opensource app
  • 当我不关心枚举包含什么值时,如何在“if”语句中使用枚举?

    我有一个枚举 derive PartialEq Eq enum Foo A B usize 我可以用它if涉及其他逻辑的语句 例如baz fn bar foo Foo baz bool if foo Foo B 3 baz println
  • 将值解析为可空枚举

    假设我有这个 PriorityType priority string userInput 我无法改变它的定义方式 PriorityType priority因为它实际上是与另一段代码签订的合同的一部分 我尝试了这个 但它不起作用 if E
  • 常见的未知 PHP 安全陷阱

    我知道这样的问题已经被问过一百次了 但我的有点不同 我了解所有常见且广为人知的安全问题 例如 SQL 注入 XSS 等 但是那些经常出现但大多数时候未被识别或未被判断为漏洞的问题呢 有吗 我见过很多作为一项功能而开发的一件事 直到为时已晚才
  • 有没有办法在 C++ 中实现 Python 的“separator”.join() 的模拟?

    我所找到的只是boost algorithm string join 然而 仅使用 Boost 进行连接似乎有点矫枉过正 那么也许有一些经过时间考验的食谱 UPDATE 抱歉 问题标题不好 我正在寻找用分隔符连接字符串的方法 而不仅仅是一一
  • PHPExcel toArray 跳过第一个标题行

    我正在将 Excel 文件上传到网站并对其进行处理以供数据库使用 我在用着toArray 函数获取 php 数组中的所有行 但我想跳过第一行 标题行 其余行将存储在数组中 我怎样才能跳过第一行 注意 我不能使用rangeToArray 函数
  • 如何从 Azure DevOps 管道将密钥写入 Azure Key Vault?

    我已经使用 ARM 在 Azure DevOps 中创建了一个 Key Vault 现在我想在同一管道中向它写入一个密钥 我使用以下内联 PowerShell 创建了一个 Azure PowerShell 任务 secretvalue Co
  • 使用 ImageMagick 批量调整图像大小并将图像输出到新文件夹

    当前图像文件夹路径 public html images thumbs 输出图像文件夹路径 public html images new thumbs 我当前文件夹中的每个视频有 10 个视频拇指 名为图像拇指 1 1 jpg 1 2 jp
  • 如何在 C++ 中从基类构造函数调用派生类方法? [复制]

    这个问题在这里已经有答案了 我有一个基类和两个派生类 基类构造函数在调用时应计算一些属性 尽管这些属性取决于派生类的详细信息 为了避免在每个派生类构造函数中重新编码相同的步骤 我在基类构造函数中对这些步骤进行编码 如下例所示 问题是 当我这
  • 使用 UIImagePickerController 时 iOS 10 错误 [access]

    我正在使用 XCode 8 并使用 iOS 10 2 Beta 进行测试 我已将 Photos PhotosUI 和 MobileCoreServices 框架添加到项目中 非常简单的代码 import
  • 在客户端访问IE8中文件输入的文件数据?

    是否可以获取在文件输入中选择的实际文件数据 我正在尝试执行以下代码 但 this files 不包含我期望的文件数据 在 Chrome 中确实存在 document getElementById txtFileInput onchange
  • Objective-C中使用GCD的dispatch_once创建单例

    如果您可以定位 iOS 4 0 或更高版本 使用GCD 这是在Objective C 线程安全 中创建单例的最佳方式吗 instancetype sharedInstance static dispatch once t once stat