zoukankan      html  css  js  c++  java
  • IOS基础学习日志(七)利用dispatch_once创建单例及使用

    自苹果引入了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类,为这个类实现单例

    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. }  
    到眼下为止,我们就实现了一个单例。一切就搞定了,是不是非常easy!

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

    1. SchoolManager *schoolManager = [SchoolManager sharedInstance];  
  • 相关阅读:
    windows下用cmd命令netstat查看系统端口使用情况
    linux 运维知识体系
    Oracle中MD5+Base64加密实现
    MySql学习—— 查询性能优化 深入理解MySql如何执行查询
    Mysql集群和主从
    Docker搭建 oracle
    docker容器以ROOT账号登录(获取ROOT权限/ROOT密码)
    一文看懂javaGC
    Docker 国内仓库和镜像
    排序算法___堆排序
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7020006.html
Copyright © 2011-2022 走看看