多线程创建单例

 1 ?+ (instancetype)sharedDataInstance
 2 {
 3     static DataManager *data = nil;
 4     // 锁定 data 对象,保证 data 创建过程的原子性
 5     @synchronized (self) {
 6         if (!data) {
 7             data = [[DataManager alloc] init];
 8         }
 9     }
10     return data;
11 }
 1 + (instancetype)sharedDataInstanc
 2 {
 3     static DataManager *data = nil;
 4     dispatch_once_t onceToke;
 5     dispatch_once(&onceToke, ^{
 6         if (!data) {
 7             data = [[DataManager alloc] init];
 8         }
 9     });
10     return data;
11 }
时间: 2024-10-11 07:08:28

多线程创建单例的相关文章

使用多线程创建单例对象

#import "ZKZApplication.h" @implementation ZKZApplication +(instancetype)allocWithZone:(struct _NSZone *)zone { static ZKZApplication *application; // dispatch_once是线程安全的,onceToken默认为0 static dispatch_once_t onceToken; // dispatch_once宏可以保证块代码中的

iOS:创建单例对象的两种方式

单例模式:创建单例对象的两种方式 方式一:iOS4版本之前 static SingleClassManager *singleManager = nil; +(SingleClassManager*)sharedManager { @synchronized(self)  //同步加锁,在多线程中使用,可以使线程安全 { if(singleManager == nil) { singleManager = [[SingleClassManager alloc]init]; } } return

iOS中创建单例的两种方式

刚刚开始做iOS开发的时候,不知道怎么创建单例,在网上搜的也大多数都不太全,所以总结了一下创建单例的两种方式 首先在.h文件中声明类方法 1 +(instancetype)sharedUtils; 然后在.m文件中实现它,实现的方法有两种 第一种,在创建一个对象时先判断在程序中有没有创建过这个对象 1 static PublicUtils *DefaultManager = nil; 2 3 +(instancetype)sharedUtils 4 { 5 if (!DefaultManager

创建单例实体类

package xiancheng;/** * 单例创建的方式 * 1.懒汉式 * 2.饿汉式 * 3.利用内部类的方式 * @author User * */ public class lianxi18 {}/** * 加入内部类的形式 类在使用的形式才加载 延缓加载时间 * @author User * */class demo03 { private static class jvmholder{ public static demo03 instance=new demo03(); }

IOS 使用dispatch_once 创建单例

+ (instantClass *)sharedClient { static instantClass *_sharedClient = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _sharedClient = [[instantClass alloc] init]; }); return _sharedClient; } IOS 使用dispatch_once 创建单例,码迷,mamicode.co

【Spring实战】—— 3 使用facotry-method创建单例Bean总结

如果有这样的需求: 1 不想再bean.xml加载的时候实例化bean,而是想把加载bean.xml与实例化对象分离. 2 实现单例的bean 以上的情况,都可以通过工厂方法factory-method来创建bean. 这样再加载bean.xml时,不会直接实例化bean,而是当调用factory-method所指的方法时,才开始真正的实例化. 首先看一下传统的单例模式的实现方式: 1 最原始的实现单例模式的方法(存在线程不安全): public class SingletonOne { pri

创建单例类

Main.m /* 创建单例类 */ int main(int argc, const char * argv[]) { // NSBundle *bundle = [NSBundle mainBundle]; // NSFileManager *fileManager = [NSFileManager defaultManager]; SingletonClass *single1 = [SingletonClass defaultClass]; SingletonClass *single2

dispatch_once创建单例

单例是开发中使用最常见的一种设计模式,无论创建多少个对象,都返回同一个实例,共享一块内存.OC创建单例,基本上就是定义一个类方法,在里面创建一个 对象,然后返回该对象,下次在创建的时候就会判断是否存在该对象,如果有直接返回,没有则重新创建,当然这个对象是保存在全局静态区的.苹果引入了 GCD,代码量就简化了很多,因此可以使用GCD当中的   void dispatch_once(dispatch_once_t *predicate,dispatch_block_t block) 函数来帮助用户创

利用dispatch_once创建单例

利用dispatch_once创建单例 使用Objective-C实现单例模式的最佳方式向来有很多争论,开发者(包括Apple在内)似乎每几年就会改变他们的想法.当Apple引入了Grand Central Dispatch (GCD)(Mac OS 10.6和iOS4.0),他们也引入了一个很适合用于实现单例模式的函数. 该函数就是dispatch_once: void dispatch_once( dispatch_once_t *predicate, dispatch_block_t bl