美文网首页
iOS Swift/OC双语单例

iOS Swift/OC双语单例

作者: 爱码仕 | 来源:发表于2016-12-15 23:29 被阅读0次
         单例模式是iOS中常用的一种设计模式。单例模式是一个类在系统中只有一个实例对象,通过全局的一个入口点对这个实例对象进行访问。
    

    在程序中,单例模式经常只希望一个类中有一个实例,而不运行一个类还有两个以上的实例,当然,在iOS SDK中,根据特定的需求,有些类不仅提供了单例访问的接口,还为开发者提供了实例化一个新的对象接口。

    iOS中单例模式的实现方式一般分来两种:Non-ARC(非ARC)和ARC+GCD

    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

    1.

    //当多线程时,该方法会出现线程安全问题,不建议
    +(instancetype)sharePerson{
        static Person *p = nil;
        if (p == nil) {
            p = [[Person alloc] init];
        }
        return p;
    }
    
    

    2.

    +(instancetype)defaultPerson{
        static Person *p = nil;
        //加锁,线程安全。官方推荐的单例实现方式之一
        @synchronized (p) {
            p = [[self alloc] init];
        }
        return p;
    }
    

    3.

    +(instancetype)sharePerson1{
        static Person *p = nil;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            //block体中的代码只会被执行一遍,这个对象p只会被创建一次,所以也是纯种安全的,官方推荐的单例实现方式之一
            p = [[Person alloc] init];
        });
        return p;
    }
    
    

    相关文章

      网友评论

          本文标题:iOS Swift/OC双语单例

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