美文网首页
用单例的方法实现夜间模式

用单例的方法实现夜间模式

作者: Escapeplan | 来源:发表于2015-12-29 21:06 被阅读0次

为了应对用户的需求,在夜间的时候由于屏幕背景色太亮,导致眼睛受到过于强烈的光线刺激,大部分App加入了夜间模式的功能.实现夜间模式的方式有很多种,那么本文将采用单例的方式去达到这一目的.

实现夜间模式的样例如上动态图

上图1,首先创建一个单例,继承于NSObject, 如图是一个便利构造器方法, 先是创建一个类的静态变量, 并设置为空, 意思就是在第一次运行到这里, 把单例对象置空, 之后会跳过这行命令.  下一行的@synchronized(self)为线程锁, 一般我们看到的ios单列中并未有加@synchronized(self), 然而这样如果是多个线程同时来调用该单列,就会出现问题,创建的实例就不只是单例了,加了线程锁后让该单列始终只能返回一个实例,即单例:假如线程A来调用shareSingle这个方法时,会判断 single == nil的情况,若没有创建则会创建实例,然而另外的一个线程B也来调用这句话时候,没有线程锁的情况会使其并发调用,即创建了两个实例;有了线程锁,让A创建好了实例后,那么B再来调用的时候就不会走进入if(single == nil){}的括号,而直接执行 retrun single这句,避免了重复创建实例。我认为线程锁的作用在于避免并发调用该方法,避免创建大于1个实例。

上图2, 创建一个BOOL类型属性来获得是否夜间模式状态

然后在一个ViewController里创建一个开关,给开关设置点击方法.

在这里创建单例对象.判断, 当开关打开状态时候,把单例里的style属性设置为YES,并改变当前页的背景色,反之,把单例里的style属性变为NO.

创建一个按钮button, 然后通过点击按钮push到下一页

这里创建单例对象,因为前一页单例已经创建了一个对象,所以这里再调用shareSingle方法时候,直接return single.

然后判断单例内style值,来改变背景色等.

这只是很简单的一个改变背景颜色,当你熟练掌握单例的使用方法之后,就可以通过单例来实现真正意义上的夜间模式.

相关文章

  • 用单例的方法实现夜间模式

    为了应对用户的需求,在夜间的时候由于屏幕背景色太亮,导致眼睛受到过于强烈的光线刺激,大部分App加入了夜间模式的功...

  • 单例模式

    1.利用装饰器实现单例模式 2.修改new方法实现单例模式 3.利用元类实现单例模式 总结: 用装饰器和元类实现的...

  • 单例模式和GCD单例实现

    1、传统单例模式2、GCD单例模式3、用宏实现GCD单例模式4、用宏实现GCD单例模式,名称随类名变化而变化 单例...

  • python面试题-2018.1.30

    问题:如何实现单例模式? 通过new方法来实现单例模式。 变体: 通过装饰器来实现单例模式 通过元类来创建单例模式...

  • 单例模式

    一、实现单例模式 或者 二、透明的单例模式 三、用代理实现单例模式 四、JavaScript中的单例模式 在Jav...

  • Python之单例模式总结

    一、单例模式 a、单例模式分为四种:文件,类,基于__new__方法实现单例模式,基于metaclass方式实...

  • 单例模式(单例宏)

    单例模式 单例模式(arc) 类的实现 调用单例 单例模式(mrc) 除了上边的方法我们在mrc的时候还需要增加一...

  • C++中线程安全的单例模式(2)

    简介 本文介绍单例模式实现的另外两种方法: 通过double check(借助std::atomic)实现单例模式...

  • 单例模式和装饰器

    new方法实现单例模式 装饰器

  • 单例模式(使用同步方法)

    主方法 单例模式实现类 线程

网友评论

      本文标题:用单例的方法实现夜间模式

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