美文网首页
单例模式的安全创建法

单例模式的安全创建法

作者: 敌敌味丶 | 来源:发表于2018-05-02 21:34 被阅读0次

    单例外部环境不可控,内部可控。所有要保证单例唯一,就只有在其.m内实现。

    使用情景

    高频率去生产一个对象,然后又释放。让多个不相关的类共享数据。

    创建单例

    .h

    //
    //  SafeSingleton.h
    //  OC基础
    //
    //  Created by FYJMac on 2018/5/2.
    //  Copyright © 2018年 FYJMac. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    @interface SafeSingleton : NSObject
    //创建或获取单例对象
    + (instancetype)sharedSafeSingleton;
    //注销单例对象
    - (void)cancelShare;
    
    @end
    

    .m

    //
    //  SafeSingleton.m
    //  OC基础
    //
    //  Created by FYJMac on 2018/5/2.
    //  Copyright © 2018年 FYJMac. All rights reserved.
    //
    
    #import "SafeSingleton.h"
    
    @implementation SafeSingleton
    
    static SafeSingleton *singleton;
    
    //load是第一次加载该类时触发(不管有没有调用);initialize时第一次使用该类时触发
    + (void)initialize
    {
        [SafeSingleton sharedSafeSingleton];
    }
    
    + (instancetype)sharedSafeSingleton
    {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            singleton = [[SafeSingleton alloc] init];
        });
        return singleton;
    }
    
    //防止被创建多个
    + (instancetype)alloc
    {
        if (singleton) {
            //抛出一个异常,通常是在写框架的时候用到
            NSException *exception = [NSException exceptionWithName:@"NSInternalInconsistencyException" reason:@"There can only be one Singleton indtance." userInfo:nil];
            [exception raise];
        }
        return [super alloc];
    }
    
    
    - (void)cancelShare
    {
        singleton = nil;
    }
    

    相关文章

      网友评论

          本文标题:单例模式的安全创建法

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