美文网首页
iOS【单例模式】

iOS【单例模式】

作者: iCuiCui | 来源:发表于2018-03-22 16:38 被阅读2次

    单例模式可能是设计模式中最简单的形式了,这一模式的意图就是使得类中的一个对象成为系统中的唯一实例。它提供了对类的对象所提供的资源的全局访问点。因此需要用一种只允许生成对象类的唯一实例的机制。

    1.单例的作用:

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

    2.单例模式的使用场合

    • 类只能有一个实例,并且必须从一个人为数值的访问点对其访问。
    • 这个唯一的实例只能通过子类化进行拓展,并且拓展的对象不会破坏客户端代码。

    3.实现方式

    3.1简单易理解的方法就是用通过dispatch_once_t来保证线程的安全性
    + (instancetype)sharedInstance {
        static dispatch_once_t once;
        static id __singletion;
        dispatch_once(&once, ^{
            __singletion = [[self alloc] init];
        });
        return __singletion;
    }
    

    可以用把他封装在一个宏里面,这样项目里就都可以共用了,不用每次实现这样方法

    #define SGR_SINGLETION(...)                                         \
    + (instancetype)sharedInstance NS_SWIFT_NAME(shared());
    
    #define SGR_DEF_SINGLETION(...)                                     \
    + (instancetype)sharedInstance                                      \
    {                                                                   \
    static dispatch_once_t once;                                        \
    static id __singletion;                                             \
    dispatch_once(&once,^{__singletion = [[self alloc] init];});        \
    return __singletion;                                                \
    }
    
    3.2传统方法
    +(instancetype)sharedInstance {
       static WMSingleton *singleton = nil;
       if (! singleton) {
           singleton = [[self alloc] initPrivate];
       }
       return singleton;
    }
    - (instancetype)init {
       @throw [NSException exceptionWithName:@"这个是个单例" reason:@"应该这样调用 [WMSingleton sharedInstance]" userInfo:nil];
       return nil;
    }
    //实现自己真正的私有初始化方法
    - (instancetype)initPrivate {
       self = [super init];
       return self;    
    }
    

    相关文章

      网友评论

          本文标题:iOS【单例模式】

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