zoukankan      html  css  js  c++  java
  • iOS单例的使用

    #import <Foundation/Foundation.h>

    @interface YSHTTPHelper : NSObject

    /**

     *  创建一个单例类

     */

    + (YSHTTPHelper *)defaultHTTPHelper;

     @end

    #import "YSHTTPHelper.h"

    @implementation YSHTTPHelper

    /**

     *  单例的个人理解:如果这个实例等于空的时候再去创建

     *  官方:保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源

     *  优点:节约内存空间

     */

    + (YSHTTPHelper *)defaultHTTPHelper

    {

        static YSHTTPHelper *instances = nil;// 创建实例对象

         /**

         *  下面我们来看看dispatch_once的原理:

         *  dispatch_once主要是根据onceToken的值来决定怎么去执行代码。

         *  当onceToken= 0时,线程执行dispatch_once的block中代码

         *  当onceToken为其他值时,线程被线程被阻塞,等待onceToken值改变

         *  当线程首先调用shareInstance,某一线程要执行block中的代码时,首先需要改变onceToken的值,再去执行block中的代码。这里onceToken的值变为了140734731430192。

         *  这样当其他线程再获取onceToken的值时,值已经变为140734731430192。其他线程被阻塞。

         *  这样dispatch_once在首次调用时同步阻塞线程,生成单例之后,不再阻塞线程。dispatch_once是创建单例的最优方案

         *

         */

        static dispatch_once_t onceToken;// 创建线程锁

        dispatch_once(&onceToken, ^{

            instances = [[self alloc] init];// 当没有的时候去创建

        });

        return instances;

    }

    @end

  • 相关阅读:
    Android中GC_EXTERNAL_ALLOC的含义
    Phonegap开发的前后台数据交互
    代码管理工具TortoiseSVN
    14款响应式前端开发框架
    简化工作流程,10款必备的HTML5开发工具
    [C#.net]处理UTF-8文件乱码
    [Oracle]ORA-14400:插入的分区关键字未映射到任何分区
    [网络]10M、100M、1000M网线的水晶头接法
    [Office]Execl取消保护密码
    SLI的相关学习
  • 原文地址:https://www.cnblogs.com/happyEveryData/p/5533700.html
Copyright © 2011-2022 走看看