objc的单例模式(ARC环境下)

来源:互联网 发布:神奇软件 编辑:程序博客网 时间:2024/05/17 09:13

单例模式的作用

  • 可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问
    从而方便地控制了实例个数,并节约系统资源

单例模式的使用场合

  • 在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次)

实现单例模式(ARC环境下)

.m中保留一个全局的static的实例static id _instance;//重写allocWithZone:方法,在这里创建唯一的实例(注意线程安全)+ (instancetype)allocWithZone:(struct _NSZone *)zone{    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{        _instance = [super allocWithZone:zone];    });    return _instance;}//提供1个类方法让外界访问唯一的实例+ (instancetype)sharedInstance{    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{        _instance = [[self alloc] init];    });    return _instance;}//实现copyWithZone:方法- (id)copyWithZone:(struct _NSZone *)zone{    return _instance;}

结果验证

Singleton *obj1 = [Singleton shareInstace];NSLog(@"%@",obj1);Singleton *obj2 = [Singleton shareInstace];NSLog(@"%@",obj2);Singleton *obj3 = [[Singleton alloc]init];NSLog(@"%@",obj3);Singleton *obj4 = [[Singleton alloc]init];NSLog(@"%@",[obj4 copy]);

打印如下:

2015-08-22 20:31:12.279 Singleton model[50359:811745] <Singleton: 0x7fe55852d510>2015-08-22 20:31:12.280 Singleton model[50359:811745] <Singleton: 0x7fe55852d510>2015-08-22 20:31:12.280 Singleton model[50359:811745] <Singleton: 0x7fe55852d510>2015-08-22 20:31:12.280 Singleton model[50359:811745] <Singleton: 0x7fe55852d510>
0 0
原创粉丝点击