美文网首页
iOS模式解析-单例模式

iOS模式解析-单例模式

作者: aron1992 | 来源:发表于2017-12-09 21:06 被阅读8次

设计模式-单例模式

1、为什么用单例模式

1.1、OC编程习惯

xcode 4.2之前使用MRC
alloc创建的对象需要手动release
xcode4.2之后使用ARC
自动释放内存

1.2、 使用场景

  • controls concurrent access to a shared resource.
  • access to the resource will be requested from multiple, disparate parts of the system.
  • there can be only one object.
  • 涉及到资源共享的场景,只需要一个对象而不需要重复的创建多个对象,一般滴,系统中使用到的 RecycleBin Finder 都是单例对象

常用到的资源共享的场景:

  • 文件型的资源共享:

数据库文件、设置存储文件、缓存文件等的共享并发操作
1、IO操作是资源密集型的操作,这种情形如果存在多个实例会导致资源消耗严重
2、在多个地方操作同一个文件会存在数据不一致的问题
3、共享使用单例容易管理
IOS系统中的设置存储文件操作管理者NSUserDefaults、缓存文件管理者NSURLCookieStorage都是使用单例的设计模式

  • 全局的消息处理,队列处理等

IOS系统中的消息中心NSNotificationCenter在APP内全局处理通知的收发;
UIApplication管理APP进程中事件队列(基于NSRunLoop事件循环)、UIApplication全局处理URL、UIApplication全局处理推送通知的接收

iOS系统中的单例
UIApplication 管理全局的设置和事件

  • 设置UIApplicationDelegate delegate
  • 注册通知 registerForRemoteNotifications
  • 管理window keyWindow
  • 管理StatusBar statusBarStyle/statusBarHidden
  • 打开URL canOpenURL openURL

NSUserDefaults 管理全局的用户数据
NSNotificationCenter 管理全局的通知监听
NSURLCookieStorage 管理全局的Cookie
NSFIleManager 管理全局的文件操作
NSURLCache
UIAccelerometer

开发过程中常用到的单例

  • 数据库链接管理、数据库连接池
  • 网络连接请求管理、下载管理器
  • 用户信息管理
  • Log记录

2、单例模式的使用

2.1、单例模式的特点

2.1.1、有且只有一个实例
2.1.2、必须自行创建一个实例
2.1.3、必须提供一个全局的唯一访问点,一般是一个静态的公有方法
2.1.4、必须是线程安全的,在多线程环境中不能创建多个对象

2.2、角色划分

2.2.1、单例类
2.2.2、客户端使用者

2.3、如何实现

2.3.1、提供一个静态的实例
2.3.2、提供一个静态的类方法,创建和返回静态实例
2.3.3、保证初始化只有一个实例对象

2.4、几种实现方式

2.4.1、普通的单例模式
2.4.2、线程安全的单例模式,使用GCD
2.4.3、load方法创建的单例模式,饿汉式的创建,应用程序加载运行的时候就会调用,不会等到用户手动调用,如果单例对象创建是耗时操作,或者有依赖到其他的对象创建、避免使用这种方式

2.5、单例的继承处理
swift可以使用final修饰类,处理单例类不可被继承
swift可以定义private的构造方法,单例模式的设计更加的标准
swift 使用静态属性实例化: private static let instance = SingleTon();创建的对象相当于OC中使用GCD创建的单例对象,并且是线程安全的。
swift 使用结构体实现单例:线程安全

private class var shareInstance = SingleTon() {
    struct Static {
        static let instance = SIngleTon()
    }
    return Static.instance;
}

Java使用双重检查保证了线程安全以及效率和性能

if (instalce == null) {
    synchronized (SingleTon.class) {
        if (instalce == null) {
            instance = new SingleTon();
        }       
    }
}

相关文章

  • 单例

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

  • iOS 单例模式

    关于单例模式的详解,看完这几篇,就完全了然了。iOS 单例模式iOS中的单例模式iOS单例的写法

  • iOS 单例模式 or NSUserDefaults

    本文内容:iOS的单例模式NSUserDefaults的使用总结:iOS单例模式 and NSUserDefaul...

  • 单例模式 Singleton Pattern

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

  • 【设计模式】单例模式

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

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

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

  • iOS模式解析-单例模式

    设计模式-单例模式 1、为什么用单例模式 1.1、OC编程习惯 xcode 4.2之前使用MRCalloc创建的对...

  • iOS知识梳理3:设计模式

    iOS有哪些常见的设计模式?单例模式/委托模式/观察者模式/MVC模式 单例模式 单例保证了应用程序的生命周期内仅...

  • 谈一谈iOS单例模式

    这篇文章主要和大家谈一谈iOS中的单例模式,单例模式是一种常用的软件设计模式,想要深入了解iOS单例模式的朋友可以...

  • 设计模式之单例模式

    单例设计模式全解析 在学习设计模式时,单例设计模式应该是学习的第一个设计模式,单例设计模式也是“公认”最简单的设计...

网友评论

      本文标题:iOS模式解析-单例模式

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