美文网首页
单例的完整写法

单例的完整写法

作者: 攻克乃还_ | 来源:发表于2017-09-14 08:02 被阅读8次
    • 有朋友还在单例的问题上纠结,如何写才算完备,今天在这里写一写。
    • 注意:单例一但创建,整个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;
    }
    

    相关文章

      网友评论

          本文标题:单例的完整写法

          本文链接:https://www.haomeiwen.com/subject/puyrsxtx.html