OC的单例模式的实现

来源:互联网 发布:数据分析介绍 编辑:程序博客网 时间:2024/05/21 09:22

以下是在ARC,GCD下的单例模式实现:


头文件中申明类方法getInstance:

#import <Foundation/Foundation.h>@interface SingleTon : NSObject+ (SingleTon*) getInstance;@property (nonatomic,strong) NSString* SingleData;@end

实现中,使用静态变量instance存储单例,在init中设置使用GCD的dicpatch_once来执行只运行一次的线程安全代码.即设置在init中,只在instance为nil时,来进行初始化,将获得的对象赋值给instance,并返回instance.在OC中不能隐藏构造函数,而我认为,这种情况下,对构造函数进行一些修改,使使用者即使能调用init,但最终获得得依然是单例对象:

@implementation SingleTonstatic  SingleTon* instance;-(instancetype)init{    static dispatch_once_t once;    dispatch_once(&once,^{        instance = [super init];        if(nil != instance){            instance.SingleData = @"init";        }    });    return instance;}+(SingleTon *) getInstance{    if(nil == instance){        instance = [[self alloc]init];    }    return instance;}@end
个人暂时感觉这样很安全了.

1 0
原创粉丝点击