美文网首页
OC / Swift 单例创建的三种方式

OC / Swift 单例创建的三种方式

作者: 努力奔跑的小男孩 | 来源:发表于2016-11-22 21:28 被阅读98次

    // OC 

    #import "Person.h"

    static Person * person = nil;

    @implementation Person

    第一种: 不推荐 多线程环境下,这样是不能保证线程安全

    +(instancetype)sharePerson{

    if (person == nil) {

    person = [[Person alloc]init];

    }

    person.age = 1;

    return person;

    }

    第二种: 官网推荐第一种

    +(instancetype)defaultPerson{

    // 使用关键字 对对象加锁, 保证线程安全,这是推荐方法之一

    @synchronized (person) {

    if (person == nil) {

    person = [[Person alloc]init];

    }

    }

    return person;

    }

    第三种: 官网推荐方法二

    +(instancetype)createPerson{

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

    if (person == nil) {

    person = [[Person alloc]init];

    }

    });

    return person;

    }

    @end

    // Swift

    1.

    let _SingletonSharedInstance = Singleton()

    class Singleton  {

    class var sharedInstance : Singleton {

    return _SingletonSharedInstance

    }

    }

    2.

    class Singleton {

    class var sharedInstance : Singleton {

    struct Static {

    static let instance : Singleton = Singleton()

    }

    return Static.instance

    }

    }

    3.

    class Singleton {

    class var sharedInstance : Singleton {

    struct Static {

    static var onceToken : dispatch_once_t = 0

    static var instance : Singleton? = nil

    }

    dispatch_once(&Static.onceToken) {

    Static.instance = Singleton()

    }

    return Static.instance!

    }

    }

    相关文章

      网友评论

          本文标题:OC / Swift 单例创建的三种方式

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