美文网首页
iOS解决项目中过多的单例设计

iOS解决项目中过多的单例设计

作者: 杜长生 | 来源:发表于2019-05-05 17:33 被阅读0次

0x00 背景

项目中使用了大量的单例类,在账号切换后,无法释放,需要维护大量状态和逻辑处理。

0x01 解决方案

  1. 容器包装
  2. 引用计数

0x02 方案讲解

1. 容器包装

参考解决循环引用的方案,全局一个单例类,里面若干个weak属性变量,在登录成功后,存到全局单例的weak属性里面,这样就可以全局访问了,但其生命周期由登录后的类维护,登出,即释放。

2. 引用计数

这种模式适合,一个大的模块,底层用的同一个唯一的服务类,但又不想外部知道:

static NSInteger count = 0;
static Networking *shareInstance = nil;
static dispatch_semaphore_t semaphore = nil;

+ (void)load {
    semaphore = dispatch_semaphore_create(1);
}

+ (instancetype)defaultNetworking {
    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
    count ++;
    if (shareInstance == nil) {
        shareInstance = [[Networking alloc] init];
    };
    NSLog(@"Networking alloc count:%@", @(count));
    dispatch_semaphore_signal(semaphore);
    return shareInstance;
}

+ (void)releaseNetworking {
    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
    count --;
    if (count <= 0) {
        count = 0;
        shareInstance = nil;
    }
    NSLog(@"Networking dealloc count:%@", @(count));
    dispatch_semaphore_signal(semaphore);
}

0x03 参考文档

iOS系统引用计数的实现

相关文章

  • iOS解决项目中过多的单例设计

    0x00 背景 项目中使用了大量的单例类,在账号切换后,无法释放,需要维护大量状态和逻辑处理。 0x01 解决方案...

  • 你真的能写好一个单例么?

    单例可能是 iOS 开发者最熟悉设计模式之一了。 我们的项目里头也使用了很多单例?。 最近为了解决项目中单例的 b...

  • Android性能优化

    项目中的单例 在分析性能优化之前偶然的看到项目中的有很多单例模式,单例模式几乎是项目中被应用最多的设计模式,不同单...

  • 单例模式 Singleton Pattern

    单例模式-菜鸟教程 iOS中的设计模式——单例(Singleton) iOS-单例模式写一次就够了 如何正确地写出...

  • iOS模式设计之--创建型:1、单例模式

    iOS模式设计之--1、单例模式

  • 设计模式

    设计模式分析比较? 1、单例设计模式:在项目中,单例是必不可少的。比如UIApplication、NSUserDe...

  • 【设计模式】单例模式

    学习文章 iOS设计模式 - 单例 SwiftSingleton 原理图 说明 单例模式人人用过,严格的单例模式很...

  • 单例

    iOS单例模式iOS之单例模式初探iOS单例详解

  • Singleton && NSProxy

    “单例模式”是我们在iOS中最常使用的设计模式之一。单例模式不需要传递任何参数,就有效地解决了不同代码间的数据共享...

  • iOS单例模式容错处理

    ios 单例模式容错处理 1、单例模式的使用和问题解决 在ios开发的过程中,使用单例模式的场景非常多。系统也有很...

网友评论

      本文标题:iOS解决项目中过多的单例设计

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