IOS多线程--单例

单例 iOS中,如何实现一个真正的单例

单例问题最担心的就是线程安全,因为它常常被多个控制器同时访问

1.保证allocWithZone:方法是线程安全的,当调用super方法的时候使用dispatch_once方法锁住

2.保证单例实现方法也使用dispatch_once方法锁住创建对象的过程

3.dispatch_once

被广泛用在单例,缓存等代码中,用来保证只执行一次

在单线程中没有意义,但是在多线程中,其低负载,高的可依赖性,接口简单等,赢得五星好评

static dispatch_once_t onceToken;token迎来保证只执行一次

dispatch_once(&onceToken, ^{   要执行一次任务的block

创建单利需要几步

(1)必须给一个全局静态要创建单例类型的变量

static Banzhang *instance;

(2)重写构造方法、利用dispatch_once创建对象

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

instance = [super alloc];

instance = [instance init];

});

(3)创建单例需要重写的方法,因为这些方法能够开辟内存空间创建实体

+(instancetype)allocWithZone:(struct _NSZone *)zone{

依然利用dispatch_once

instance = [super allocWithZone:zone];

}

(4)如果我们需要调用一个自定义的copy方法,就要重写copyWithZone方法,同事遵循 NSCopying协议

-(id)copyWithZone:(NSZone *)zone{

-(id)copy{

时间: 2024-10-13 03:35:28

IOS多线程--单例的相关文章

IOS 定位 单例

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 + (SCLocationController *)sharedController {      static SCLocationController *sharedController = nil;     

iOS核心笔记——多线程-单例设计模式

1.单例设计模式: 2.单例设计模式实现(ARC模式): 2-1.单例设计模式步骤: ?重要:①提供一个静态全局变量:②重写allocWithZone方法,使用一次性方法保证只分配一次存储空间.③提供快速创建单例对象的类方法:④严谨起见,还应重写copyWithZone.mutableCopyWithZone方法. 2-2.确保内存分配: 2-3.提供类方法: 3.单例模式三个问题: ?重要:①:怎么实现一个单例模式?(重写allocWithZone方法)②:内部是怎么确保只分配一次内存?(在a

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

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

iOS的单例UIApplication总结及一些常见方法

UIApplication是一个应用程序的象征并且是一个单例对象 方法:openURL(打电话,发短信) // NSURL 资源唯一路径的地址// 规范:    协议头://主机地址/资源路径// 网络资源: http://www.baidu.com/image/123.png// 本地资源: file:///user/desktop/image/321.png // 状态栏交给Application管理(在系统info.plist文件中添加下面这条命令)View controller-base

iOS之单例

今天在看多线程同步时,突然想到了单例的同步问题.自从dispatch_once出现后,我们创建单例非常简单且安全: 1 static dispatch_once_t pred; 2 static SingleObject *sharedObject = nil; 3 4 dispatch_once(&pred, ^{ 5 sharedObject = [[[self class] alloc] init]; 6 }); 7 return sharedObject; 苹果简洁的接口已经慢慢让我们忘

黑马程序员_java多线程 单例设计

------- <a href="http://www.itheima.com" target="blank">android培训</a>.<a href="http://www.itheima.com" target="blank">java培训</a>.期待与您交流! ---------- 一.线程的方法 1.yield让出cpu 2.setPriority()设置线程的优先

5.29 多线程 单例

多线程中的3种单例 1.饿汉式 无线程安全问题 2.懒汉式 有线程安全问题要加同步 3.内部类 方式与饿汉式基本相同. 多线程资源的共享 1.ThreadLocal  多线程 多个实例 无需互相交互的情况下使用,http://www.tuicool.com/articles/qYJrA3 2.sycnrorid   必须等待 3.reentrantlock 可以根据情况判断是否等待 http://www.apihome.cn/api/java/ReentrantLock.html

多线程单例 可以概括为两中模式(饿汉模式和懒汉模式)

如何保证多线程下的单例. 1多线程安全单例模式一(不使用同步锁). 1 1 public class Singleton { 2 2 private Singleton() 3 3 {} 4 4 private static Singleton singleton; 5 5 6 6 public static Singleton getInstance() 7 7 { 8 8 if(singleton ==null) 9 9 { 10 10 singleton =new Singleton();

iOS设计模式 - 单例

原理图 说明 1. 单例模式人人用过,严格的单例模式很少有人用过 2. 严格的单例模式指的是无法通过常规的 alloc init 方法来生成对象,派生出来的子类也不能产生出对象,而只能通过单例的方法获取到对象 源码 https://github.com/YouXianMing/SingletonPattern // // Singleton.h // SingletonPattern // // Created by YouXianMing on 15/8/6. // Copyright (c)