美文网首页
weak singleton「弱引用单例」

weak singleton「弱引用单例」

作者: 鸢飞阿诗玛 | 来源:发表于2017-07-17 09:40 被阅读0次

    原文链接1
    原文链接2
    普通的单例,在被创建之后会一直存活在内存中.例如,分步注册过程中,为了多页面信息共享而创建的单例,一旦被访问,就会一直存活.实际上,这个信息在之后软件的使用过程中,是不必要的,这在一定程度上造成了内存使用的浪费.
    而弱引用单例解决了这个问题,他的特别之处在于:在所有使用该单例的对象都释放后,单例对象本身也会被释放.

    + (id)sharedInstance {
        static __weak ASingletonClass *instance;
        ASingletonClass *strongInstance = instance;
        @synchronized(self) {
            if(strongInstance == nil) {
                strongInstance = [[[self class] alloc] init];
                instance = strongInstance;
            }
        }
        return strongInstance;
    }
    

    分析下以上代码:

    • instance : 静态局部变量,生存周期为整个程序运行期间
    • strongInstance : 局部变量,生存周期为函数运行期间

    我们来模拟下程序的运行场景:

    ASingletonClass A = [ASingletonClass sharedInstance];
     //创建了一个新的ASingletonClass对象,instance持有弱引用该对象
    ASingletonClass B = [ASingletonClass sharedInstance]; 
    //从instance中获取了ASingletonClass单例对象的引用
    A = nil;
    B = nil; 
    //ASingletonClass单例对象只被instance弱引用,被销毁
    

    weak singleton简单而巧妙的利用了weak特性,在无人使用 instance 之后就自动销毁,当sharedInstance再次被调用时,instance又会重新被创建。
    以上.

    相关文章

      网友评论

          本文标题:weak singleton「弱引用单例」

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