单例

单例模式.jpg

在项目中我们经常会用到单例类,觉得很方便,但是其弊端也很明显:单例类的职责过重,在一定程度上违背了“单一职责原则”。因为单例类既充当了工厂角色,提供了工厂方法,同时又充当了产品角色,包含一些业务方法,将产品的创建和产品的本身的功能融合到一起。

如何写一个安全的单例类呢?看声明文件

#import <Foundation/Foundation.h>

@interface DanLi : NSObject<NSCopying,NSMutableCopying>

//单例类
+ (instancetype)sharedInstance;
@end

再看实现文件

#import "DanLi.h"

@implementation DanLi

static DanLi *instance = nil;
+ (instancetype)sharedInstance {
    return [[self alloc]init];
}

+ (instancetype)allocWithZone:(struct _NSZone *)zone {
    if(!instance){
static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
         instance = [super allocWithZone:zone];
    });
  }
   
    return instance;
}

- (id)copyWithZone:(struct _NSZone *)zone {
    return [DanLi sharedInstance];
}
-(instancetype)mutableCopyWithZone:(NSZone *)zone{
    return [DanLi sharedInstance];
}

//new方法不需要重写

- (DanLi *)init {
    
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
         if(!instance){
       instance = [super init];
    }
    
    return instance;
}
@end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容