IOS:利用dispatch_once创建单例

简介: 在之前有一篇学习笔记中,记载了一篇如何在OC中实现单例的文章:《IOS学习笔记4—Objective C—创建单例》自苹果引入了Grand Central Dispatch (GCD)(Mac OS 10.6和iOS4.0)后,创建单例又有了新的方法,那就是使用dispatch_once函数,当然,随着演进的进行,还会有更多的更好的方法出现。

   在之前有一篇学习笔记中,记载了一篇如何在OC中实现单例的文章:《IOS学习笔记4—Objective C—创建单例》自苹果引入了Grand Central Dispatch (GCD)(Mac OS 10.6和iOS4.0)后,创建单例又有了新的方法,那就是使用dispatch_once函数,当然,随着演进的进行,还会有更多的更好的方法出现。今天就来简要介绍下如何利用dispatch_once创建单例。

       在开发中我们会用到NSNotificationCenter、NSFileManager等,获取他们的实例通过[NSNotificationCenter defaultCenter]和[NSFileManager defaultManager]来获取,其实这就是单例。

我们先看下函数

void dispatch_once( dispatch_once_t *predicate, dispatch_block_t block);

其中第一个参数predicate,该参数是检查后面第二个参数所代表的代码块是否被调用的谓词,

第二个参数则是在整个应用程序中只会被调用一次的代码块。dispach_once函数中的代码块只会被执行一次,而且还是线程安全的。

       接下来我们来实现自己的单例,这里有一个SchoolManager类,为这个类实现单例

 

[cpp]  view plain copy
 
  1. +(SchoolManager *)sharedInstance  
  2. {  
  3.     static SchoolManager *sharedManager;  
  4.       
  5.     static dispatch_once_t onceToken;  
  6.     dispatch_once(&onceToken, ^{  
  7.         sharedManager = [[SchoolManager alloc] init];  
  8.     });  
  9.       
  10.     return sharedManager;  
  11. }  

到目前为止,我们就实现了一个单例,一切就搞定了,是不是很简单!

 

使用就按照如下方式获取唯一实例即可:

 

[cpp]  view plain copy
 
  1. SchoolManager *schoolManager = [SchoolManager sharedInstance];  

 

 

以上就简单介绍了使用dispatch_once函数实现单例的方法,欢迎大家补充并讨论!

如何联系我:【万里虎】www.bravetiger.cn 【QQ】3396726884 (咨询问题100元起,帮助解决问题500元起) 【博客】http://www.cnblogs.com/kenshinobiy/
目录
打赏
0
0
0
0
24
分享
相关文章
iOS开发:苹果开发者账号第一次新建APP ID以及创建App的步骤
在iOS开发过程中,关于苹果开发者账号相关操作的知识点也是不可忽视的,尤其是对于一些刚接触苹果开发的开发者来说,更应该多了解一些关于苹果开发者账号的知识点,这样有利于App的测试和上架。
1230 0
iOS开发:苹果开发者账号第一次新建APP ID以及创建App的步骤
使用香蕉云编创建ios打包证书的教程
使用mac创建ios证书,需要购买mac电脑,成本非常高,因此我这里教会大家使用香蕉云编来创建ios打包证书
2866 1
使用香蕉云编创建ios打包证书的教程
iOS 开发创建CocoaPods公有库以及subspec分支功能(下)
iOS 开发创建CocoaPods公有库以及subspec分支功能
471 0
iOS 开发创建CocoaPods公有库以及subspec分支功能(下)

热门文章

最新文章

  • 1
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    21
  • 2
    iOS|解决 setBrightness 调节屏幕亮度不生效的问题
    21
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    3
  • 4
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    2
  • 5
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    6
  • 6
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    1
  • 7
    iOS各个证书生成细节
    5
  • 8
    iOS|记一名 iOS 开发新手的前两次 App 审核经历
    6
  • 9
    【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记5 Data Structures、Methods、Properties
    2
  • 10
    iOS:应用程序的线程安全性
    1
  • 1
    iOS|解决 setBrightness 调节屏幕亮度不生效的问题
    110
  • 2
    iOS|记一名 iOS 开发新手的前两次 App 审核经历
    16
  • 3
    iOS各个证书生成细节
    27
  • 4
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    142
  • 5
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    46
  • 6
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    58
  • 7
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    48
  • 8
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    41
  • 9
    uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
    162
  • 10
    【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
    327
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等