单例的完整写法

  • 有朋友还在单例的问题上纠结,如何写才算完备,今天在这里写一写。
  • 注意:单例一但创建,整个App的使用过程中都不会被释放,所以要谨慎使用。
#import <Foundation/Foundation.h>

@interface SUNTool : NSObject<NSCopying, NSMutableCopying>
+(instancetype)shareTool;
@end

#import "SUNTool.h"
@implementation SUNTool

//0.提供全局变量
static SUNTool *_instance;

//1.alloc-->allocWithZone
+(instancetype)allocWithZone:(struct _NSZone *)zone
{
    //加互斥锁解决多线程访问安全问题
//    @synchronized(self) {
//        if (_instance == nil) {
//            _instance = [super allocWithZone:zone];
//        }
//    }
    
    //本身就是线程安全的
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance = [super allocWithZone:zone];
    });
    return _instance;
}

//2.提供类方法
+(instancetype)shareTool
{
    return [[self alloc]init];
}

//3.严谨
-(id)copyWithZone:(NSZone *)zone
{
    return _instance;
}

-(id)mutableCopyWithZone:(NSZone *)zone
{
    return _instance;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • import <Foundation/Foundation.h> @interface MFShareTool :...
    _MoveForward阅读 885评论 0 1
  • 单例模式(SingletonPattern)一般被认为是最简单、最易理解的设计模式,也因为它的简洁易懂,是项目中最...
    成热了阅读 4,324评论 4 34
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,615评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,269评论 19 139
  • 2016-06-02 家里的电视机,我一般用来看电影,偶尔看看新闻,对真假莫辨又甚嚣尘上的明星真人秀节目尤其没兴趣...
    月光微微凉阅读 434评论 0 0