浅谈iOS中的单例模式

作者: 蠡园里面有李源 | 来源:发表于2016-07-12 09:34 被阅读107次

在一个ios应用中,有时候我们只需要某个类的一个实例。即是在整个项目中,这个类的对象只能被初始化一次。

例如,当应用程序启动时,应用的状态由UIApplication类的一个实例维护,这个实例则代表了整个"应用程序对象",它只能是一个实例,其作用是实现整个应用程序中一些共享资源的访问和状态的保持等。

说通俗点,通常代表一些物理设备,比如打印机。或是某种不可以有多个实例同时存在的虚拟资源或是系统属性比如一个程序的某个引擎或是数据。用单例模式加以控制是非常有必要的。

OS中好几个类都是采用了单例模式,比如NSApplication, NSFontManager,  NSDocumentController,NSHelpManager, NSNull,NSProcessInfo, NSScriptExecutionContext,  NSUserDefaults。

OC实现原理:


//Singleton.h

@interface Singleton:NSObject

+(Singleton *)sharedManager;

@property  (nonatomic,strong)NSString *singletonData;

@end


//Singleton.m

#import"Singleton.h"

@implementation Singleton

@sysnthesize singletonData=_singletonData;

static Singleton *sharedManager=nil;

+(Singleton *)sharedManager {

static dispatch_once_t_once;

dispatch_once(&once,^{

       sharedManager=[[]self alloc]init];

});

return sharedManager;

}

@end


上面用了GCD技术,作用是在整个应用生命周期中只执行一次代码块^{......}。使用时需要将GCD地址传给dispatch_oce函数。dispatch_once函数能够记录该代码块是否被调用过。

dispatch_once函数不仅意味着代码仅会被运行一次,而且还意味着此运行还是线程同步。也就是说,当我们使用dispatch_once函数时,就不要需要使用@synchronized之类的语句。



Swift实现原理

import Foundation

class Singleton {

  class var sharedInstance:Singleton { //静态计算属性

       struct Static {                               //定义结构体

          static var instance:Singleton?     //定义静态属性instance 用来保存singleton的子单例对象

         static var token:dispatch_once_t=0   //定义静态属性token,是dispatch_once_t的类型

}

     dispatch_once(&Static.token)  {          //传地址给dispatch_once .记录该代码块是否被调用过。同时意味着线程同步。

    Static.instance=Singleton()                 //实例化Singleton对象

}

return Static.instance!                   //返回实例

}

}


swift设计单例模式非常灵活,有非常多的方式。上面是考虑线程安全的单例模式。


有错误之处还望大神指正,交流。


相关文章

  • iOS 单例模式

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

  • 单例

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

  • 单例模式 Singleton Pattern

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

  • iOS单例模式容错处理

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

  • 谈一谈iOS单例模式

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

  • 浅谈iOS中的单例模式

    在一个ios应用中,有时候我们只需要某个类的一个实例。即是在整个项目中,这个类的对象只能被初始化一次。 例如,当应...

  • iOS 单例模式 or NSUserDefaults

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

  • iOS中的单例模式

    iOS开发中常用到2中设计模式,分别是代理模式和单例模式,本文主要介绍下单例模式 单例模式的作用 可以保证在程序运...

  • 单例

    在iOS开发时,总是会遇到单例模式,单例即是一种模式,更是一种思想,单例模式是借鉴了数学中的单集合。就是一个集合中...

  • IOS 设计模式

    IOS开发中几种设计模式:单例模式、观察者模式、MVC模式、代理模式 一、单例模式 场景:确保程序运行期某个类,只...

网友评论

    本文标题:浅谈iOS中的单例模式

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