iOS开发单例模式 dispatch_once

什么是单例

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

iOS开发中如何使用单例

传统的单例构造方法

+ (id)sharedInstance
{
    static id sharedInstance;
    if(sharedInstance == nil){
        sharedInstance = [[]self alloc] init]
    }
    return sharedInstance;
}

多线程下的隐患

在多线程的情况下,如果两个线程几乎同时调用sharedInstance()方法会发生什么呢?有可能会创建出两个该类的实例。 为了防止这种情况 我们通常会加上锁

+ (id)sharedInstance
{
    static id sharedInstance;
    @synchronized(self)
        if(sharedInstance == nil){
            sharedInstance = [[]self alloc] init]
        }
    }
    return sharedInstance;
}

dispatch_once

iOS 4.0 引进了 GCD ,其中的 **dispatchonce**,它即使是在多线程环境中也能安全地工作,非常安全。dispatchonce是用来确保指定的任务将在应用的生命周期期间,仅执行一次。以下是一个典型的源代码以初始化的东西。它可以优雅通过使用dispatch_once来创建一个单例。

+ (id)sharedInstance
{
    static dispatch_once_t once;
    static id sharedInstance;
    dispatch_once(&once, ^{
        sharedInstance = [[self alloc] init];
    });
    return sharedInstance;
}
时间: 07-24

iOS开发单例模式 dispatch_once的相关文章

iOs开发 单例模式 省懒宏

#define singleton_h(name) + (instancetype)shared##name; #if __has_feature(obj_arc) #define singleton_m(name)static id _instance;+ (instancetype)shared##name{static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{_instance = [[self alloc] init];

iOS 的单例模式 dispatch_once

iOS 的单例模式 dispatch_once 有些变量只需要初始化一次(如从文件中读取配置参数,读取设备型号等等),可以使用dispatch_once来进行读取优化,保证只调用API一次,以后就只要直接访问变量即可. WeatherClient.h #import "AFHTTPClient.h" @interface WeatherClient : AFHTTPClient +(WeatherClient *)sharedClient; @end WeatherClient.m #

iOS开发-单例模式

什么是单例模式?>是开发设计模式(共23种)中的1种>它可以保证在程序运行过程,一个类只有一个实例(一个对象),而且该实例易于供外界访问,从而方便地控制了实例个数,并节约系统资源>使用场合:在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次) 单例模式的基本实现1.懒汉模式 // 1.在该类中定义一个静态的全局变量,防止被外部用extren访问 static id _instance; /** static : 修饰变量 1> 修饰全局变量 * 全局变量的作用域仅限于当前

iOS开发单例模式

单例模式需要重写类的获取单例方法: 重写new方法,返回nil,不允许使用new去创建对象. 重写allocwithzone方法,当调用alloc方法时,防止创建新的对象: 重写copy mutableCopy方法防止重写分配内存

iOS开发——实用技术OC篇&单例模式的实实现(ACR&MRC)

单例模式的实实现(ACR&MRC) 在iOS开发中单例模式是一种非常常见的模式,虽然我们自己实现的比较少,但是,系统却提供了不少的到来模式给我们用,比如最常见的UIApplication,Notification等, 那么这篇文章就简单介绍一下,我们开发中如果想要实现单例模式要怎么去实现! 单例模式顾名思义就是只有一个实例,它确保一个类只有一个实例,并且自行实例化并向整个系统提供这个实例.它经常用来做应用程序级别的共享资源控制.这个模式使用频率非常高,通过一个单例类,可以实现在不同窗口之间传递数

iOS开发之单例模式下的初始化方法

iOS开发之单例模式下的初始化方法 一般的单例我们会这么写 +(instancetype)sharedXXXManager{ static XXXManager *sharedXXXManagerInstance = nil; static dispatch_once_t predicate; dispatch_once(&predicate,^{ sharedXXXManagerInstance = [[XXXManager alloc] initPrivate]; }); return sh

iOS开发笔记-两种单例模式的写法

iOS开发笔记-两种单例模式的写法 单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h" static ServiceManager *defaultManager; @implementation ServiceManager +(ServiceManager *)defaultManager{ if(!defaultManager) defaultManager=[[self allocWith

iOS开发多线程篇—单例模式(ARC) - 文顶顶

原文  http://www.cnblogs.com/wendingding/p/3808641.html iOS开发多线程篇—单例模式(ARC) 一.简单说明: 设计模式:多年软件开发,总结出来的一套经验.方法和工具 java中有23种设计模式,在ios中最常用的是单例模式和代理模式. 二.单例模式说明 (1)单例模式的作用 :可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问,从而方便地控制了实例个数,并节约系统资源. (2)单例模式的使用场合:在整个应用程序中,共享一份资

IOS开发笔记——单例模式

由java转入IOS开发了,自学配合实际项目记录一些项目中用到的技巧,APP比较小,涉及到的知识点比较简单,大牛就不用看了,小兵大家一起讨论. 单例模式就是确保在程序运行过程中,一个类只有一个实例,公司的APP的账号管理是通过单例实现的.先上代码: @interface JVAccountManager : NSObject + (JVAccountManager *)sharedAccount; @end @implementation JVAccountManager + (JVAccoun