美文网首页
iOS设计模式——单例模式

iOS设计模式——单例模式

作者: 小书同学 | 来源:发表于2018-09-23 17:48 被阅读0次

    一、什么是单例模式?

      单例模式,从字面意思很好理解,就是有且只有一个,也就是在程序中有且只有一个实例,任何时候对其的访问,返回的都是同一个实例。

    单例模式的意图就是使得类的一个对象实例成为系统中的唯一实例。

      这就需要一种只允许生成对象唯一实例的机制,阻止所有其他想要生成对象的可能。那么,就可以用静态的类方法来限制实例化的过程,从而达到有且只有一个对象的产生。单例模式,保证一个类有且只有一个实例,并提供一个访问它的全局访问点。

    二、单例模式

      下面的图标识了Singleton的静态结构


    单例模式.png

      接下来就是在iOS的代码中实现单例模式。

    //Singleton.h
    @interface Singleton : NSObject {
    }
    + (Singleton *) sharedInstance;
    - (void) operation;
    @end
    
    //Singleton.m
    @implementation Singleton
    
    static Singleton *sharedSingleton_ = nil;
    - (void) operation{
      // do something
      NSLog(@"Singleton");
    }
    + (Singleton *) sharedInstance{
      if (sharedSingleton_ == nil){
        sharedSingleton_ = [NSAllocateObject([self class], 0, NULL) init];
      }
      return sharedSingleton_;
    }
    
    + (id) allocWithZone:(NSZone *)zone{
      return [[self sharedInstance] retain];
    }
    @end
    

      单例化的实例,只能通过子类化进行扩展,而且扩展的对象不会破坏原有的代码。

    三、线程安全

      由于单例化的实例在程序中有且只有一份实例,所以在使用的过程中,或多或少的会遇到多线程的访问问题。因此,需要在sharedSingleton_静态实例的nil检查周围加入一些@synchronized()程序块或者使用NSLock加锁。如果有其他属性需要保护,也可以把它们声明为atomic类型。

    相关文章

      网友评论

          本文标题:iOS设计模式——单例模式

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