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

单例--iOS

时间:2015-09-23 13:34:31      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

GCD单例:

+ (id)sharedInstance {
    static ModulesManager * sharedManager = nil;
    static dispatch_once_t once;
    dispatch_once(&once, ^{
        sharedManager = [[self alloc] init];
    });
    
    return sharedManager;
}

 

为了防止外界通过alloc方法申请到另一块内存,只生成单个实例,需要覆盖父类的allocWithZone方法 需要注意线程安全

+(id)allocWithZone:(struct _NSZone *)zone{
    @synchronized(self){
        if (sharedSingleton == nil) {
            sharedSingleton = [super allocWithZone:zone];
        }
    }
    return sharedSingleton;
}
 
+(id)copyWithZone:(struct _NSZone *)zone{
    return sharedSingleton;
}

 

单例--iOS

标签:

原文地址:http://www.cnblogs.com/SimonGao/p/4831930.html

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