美文网首页
Swift3.0 单例实战

Swift3.0 单例实战

作者: 风与鸾 | 来源:发表于2017-05-24 17:31 被阅读28次

    概述

    整个应用生命周期中,只存在唯一一个实例对象的类被称作单例,所以的模块共同使用这一个对象的设计叫做单例模式

    单例模式的特点和创建方式:

    • 实例对象唯一,所以多个模块共同使用保证了数据唯一性。
    • 有较强的灵活性。
    • final关键字修饰的class、var、func标示不可被操作,继承,重写非常适合优化单例。
    • Swift3.0开始放弃了dispatch_once,创建单例方式有:
    final class LLNetwork: NSObject {
        static let shareInstace = LLNetwork.init()
        // 保证只有当前才能访问
        private override init(){}
    }
    

    OC单例

    • 方法一
    + (nonnull instancetype)sharedInstance {
        static id instance = nil;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            instance = [[self alloc] init];
        });
        return instance;
    }
    
    • 方法二
    + (nonnull instancetype)sharedInstance {
        static id instance = nil;
        @synchronized (self) { //保证线程安全
            if (!instance) {
                instance = [[self alloc] init];
            }
        }
        return instance;
    }
    
    

    总结

    单例保证了数据在应用运行期间的唯一性,减少了重复内存的损耗,如果单例本身内存占用过大时,要重新考虑这个模式是否适合了。另一方面,单例的访问也存在着多线程安全的问题,这需要我们合理的使用线程锁来保证单例的安全性了。

    相关文章

      网友评论

          本文标题:Swift3.0 单例实战

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