美文网首页
一个单例引发的思考

一个单例引发的思考

作者: 杨柳小易 | 来源:发表于2018-01-11 16:08 被阅读14次

一个单例引发的思考

项目中有一个直播页面(UIViewController之类的东东),打开进去之后有30+ 个单例生成。这个量级有点大,以至于由来我见了程序员朋友都会问,单例多少个合适,什么情况下能用。这么多哔哔哔哔,现在有以下观点。

观点一

内存没问题就不用管啦啦……

观点二

能不用就不用,除非不用单例模式解决不了问题

有趣的观点

单例分为:绝对单例,非绝对单例,普及一下:

所谓绝对单例,不管怎么创建,只能有一个实例存在,比如 init new shareInstnce 他们创建出来的都是同一个。 非绝对单例,shareInstnce 方法创建出来的永远是一个,init new 等方法和平常一样

weak单例

这个更有意思,某些单例的存在可能只用一次,所以,单例模式也能弄成weak 的,不用的时候就释放了,比如:实现

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

if 没有人持有 ASingletonClass 的单例了,这个单例就不存在了……

类似单例的东东

比如写在appdelegate中的东东

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) PTVUserAccount * userAccount;

@property (strong, nonatomic) PTVNetworkStatus* networkStatus;

@property (strong, nonatomic) PTVPushNotification* pushNotification;

@property (strong, nonatomic) PTVTaskManager* taskManager;

////休眠管理
@property (strong, nonatomic) DormancyManager* dormancyManager;

///后台播放管理
@property(nonatomic, strong) BackgroundPlayControl *backgroundPlayControl;

这里的东东,和 appdelegate 其实没有任何关系。为什么要放在这里呢?

END??有其他看法请留言告知我,跪谢

如果引入单例是为了解耦。这个解耦代价太大了。比如,名片卡,这个单例,点击了名片卡,然后关闭,这个对象就应该彻底的消失。而不是等待。
再比如:

-(void)analysisGuessCompetitionList:(id)data
{
    GuessCompetitionGeneralList *list = [GuessCompetitionGeneralList yy_modelWithDictionary:data];
    if(list) {
        _isOpen = list.bswitch;
        if(list.guesscompArray.count > 0) {
            
                [[PTVMultiFunctionManager sharedInstance] addMultiFunctionWithType:PTVMultiFunctionGuess isShow:self.isShowCurrentAction];
                
          
        } else {
            [[PTVMultiFunctionManager sharedInstance] removeMultiFunctionWithType:PTVMultiFunctionGuess];
        }
    }
}

网络请求成功之后,突然冒出一个单例来设置状态。这种跨模块的直接设置,其实没有解耦吧?

相关文章

  • iOS底层原理 - 单例的正确写法

    面试题引发的思考: Q: 介绍单例及其用途? 单例模式保证系统中 一个类 只有 一个实例 而且该实例 易于外界访问...

  • 一个单例引发的思考

    一个单例引发的思考 项目中有一个直播页面(UIViewController之类的东东),打开进去之后有30+ 个单...

  • 单例模式引发的思考

    synchronized详解单例详解static详解;设计模式是一种思想,适合于任何一门面向对象的语言。共有23种...

  • Java 单例以及单例所引发的思考

    前言 前几天无意中看到一篇文章,讲到了老生常谈的单例,抱着复习一下的心态点了进去,还是那些熟悉的内容,可是却发现自...

  • 设计模式——单例模式 引发的思考

    单例对象的初始化时机: 上篇博文设计模式之单例模式给出了7种单例模式的实现方法,其中静态代码块与饿汉模式的本质一致...

  • 设计模式之你真的了解单例模式么?

    问题思考 你知道什么是单例模式么?你能写出一个性能有保障并且安全的单例模式么? 首先我们先明确单例模式的概念,单例...

  • iOS底层原理 - 设计模式与架构

    面试题引发的思考: Q: 用过哪些设计模式? iOS中主要使用单例模式、代理模式、观察者模式(通知、KVO)。 Q...

  • 单例模式

    一、定义与特点 单例模式的特点 单例类只有一个实例对象 该单例对象必须由单例类自行创建 单例类对外提供一个访问该单...

  • 单例模式

    特点 单例类只有1个实例对象 该单例对象必须由单例类自行创建 单例类对外提供一个访问该单例的全局访问点 结构 单例...

  • double chenk来解决单例模式并不安全

    单例模式多线程一般解决方案会引发返回多个实例的问题。double check引发的问题是会返回一个null实例,原...

网友评论

      本文标题:一个单例引发的思考

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