首页 > 其他 > 详细

单例的写法

时间:2014-08-13 12:26:16      阅读:323      评论:0      收藏:0      [点我收藏+]

1.

#import "MySingleton.h"

static MySingleton *_singleton = nil;

+ (id)shareObject

{

    @synchronized(self){

        if (_singleton == nil) {

            _singleton = [[MySingleton alloc] init];

        }

    }

    return _singleton;

}

@end

@synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改。这个是objective-c的一个锁定令牌,防止self对象在同一时间内被其它线程访问,起到线程的保护作用。 一般在公用变量的时候使用,如单例模式或者操作类的static变量中使用。

2.

#import "MySingleton.h"

@implementation MySingleton

+ (id)shareObject

{

    static MySingleton *_singleton = nil;

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        _singleton = [[MySingleton alloc] init];

    });

    return _singleton;

}

@end

void dispatch_once( dispatch_once_t *predicate, dispatch_block_t block);
    该函数接收一个dispatch_once用于检查该代码块是否已经被调度的谓词(是一个长整型,实际上作为BOOL使用)。它还接收一个希望在应用的生命周期内仅被调度一次的代码块,对于本例就用于shared实例的实例化。
dispatch_once不仅意味着代码仅会被运行一次,而且还是线程安全的,这就意味着你不需要使用诸如@synchronized之类的来防止使用多个线程或者队列时不同步的问题。
 该方法有很多优势: 
           1 线程安全
           2 很好满足静态分析器要求
           3 和自动引用计数(ARC)兼容 
           4 仅需要少量代码

单例的写法,布布扣,bubuko.com

单例的写法

原文:http://www.cnblogs.com/wudan7/p/3909412.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!