码迷,mamicode.com
首页 > 移动开发 > 详细

iOS单例的使用

时间:2016-05-27 11:06:11      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

#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

 

iOS单例的使用

标签:

原文地址:http://www.cnblogs.com/happyEveryData/p/5533700.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!