单例的宏定义实现-07-GCD

 1 //
 2 //  LYHSingleTon.h
 3 //  07-单例的宏定义实现
 4 //
 5 //  Created by mac on 16/4/22.
 6 //  Copyright © 2016年 mac. All rights reserved.
 7 //
 8
 9 #ifndef LYHSingleTon_h
10 #define LYHSingleTon_h
11
12 // .h文件
13
14 #define LYHSingleTonH + (instancetype)sharedInstance;
15
16 // .m文件
17
18 #define LYHSingleTonM 19 /**
20  *  1. 创建一个全局变量,作用域比较广泛,所有的文件中都能够访问
21  */22 id _instance;23 24 /**
25  *  2. 重写allocWithZone:只分配一次内存
26  */27 + (instancetype)allocWithZone:(struct _NSZone *)zone {28     29     static dispatch_once_t onceToken;30     dispatch_once(&onceToken, ^{31         _instance = [super allocWithZone:zone];32     });33     return _instance;34 }35 /**
36  *  3. 既保证了单例(只分配一次内存),又保证了只init一次;
37  */38 + (instancetype)sharedInstance {39     40     static dispatch_once_t onceToken;41     dispatch_once(&onceToken, ^{42         _instance = [[self alloc] init];43     });44     return _instance;45 }46 /**
47  *  4. 重写copy方法
48  */49 - (id)copyWithZone:(NSZone *)zone {50     51     return _instance;52 }
53
54 /**
55  *  下面是不添加注释的宏定义
56  */
57 ///*
58
59 #define LYHSingleTonM 60 id _instance;61 62 + (instancetype)allocWithZone:(struct _NSZone *)zone {63 64 static dispatch_once_t onceToken;65 dispatch_once(&onceToken, ^{66 _instance = [super allocWithZone:zone];67 });68 return _instance;69 }70 71 + (instancetype)sharedMusicTool {72 73 static dispatch_once_t onceToken;74 dispatch_once(&onceToken, ^{75 _instance = [[self alloc] init];76 });77 return _instance;78 }79 80 - (id)copyWithZone:(NSZone *)zone {81 82 return _instance;83 }
84
85 */
86
87 #endif /* LYHSingleTon_h */
时间: 2024-11-09 09:51:34

单例的宏定义实现-07-GCD的相关文章

OC中的单例设计模式及单例的宏抽取

1 // 在一个对象需要重复使用,并且很频繁时,可以对对象使用单例设计模式 2 // 单例的设计其实就是多alloc内部的allocWithZone下手,重写该方法 3 4 #pragma Person.h文件 5 6 #import <Foundation/Foundation.h> 7 @interface Person : NSObject <NSCopying,NSMutableCopying> 8 + (instancetype)sharePerson; // 给类提供一

iOS 定义单例的宏

#undef  AS_SINGLETON   #define AS_SINGLETON( __class ) \       + (__class *)sharedInstance;      #undef  DEF_SINGLETON   #define DEF_SINGLETON( __class ) \           + (__class *)sharedInstance \           { \               static dispatch_once_t onc

ios开发-单例抽取宏

在日常开发中,我们经常会用到宏,宏本质上就是在编译的时候,替换代码 示例1: //##可以用于拼接宏中的变量名 #define demo(xxx)   int##xxx" main(){ int intA = 10; int intB = 20; NSLog(@"======%d",demo(A) + demo(B)); }

单例设计的定义

1 /* 2 @synchronized 的作用是创建一个互斥锁,保证此时没有其 3 它线程对self对象进行修改. 这个是objective-c的一个锁定 4 令牌,防止self对象在同一时间内被其它线程访问,起到线程 5 的保护作用.一般在公用变量的时候使用,如单例模式或者 6 操作类的static变量中使用. 7 */ 8 #import "Singleton.h" 9 10 @implementation Singleton 11 static id shared = nil;

非ARC MVC 单例使用宏

// .h文件#define HMSingletonH(name) + (instancetype)shared##name; // .m文件#define HMSingletonM(name) static id _instance; + (id)allocWithZone:(struct _NSZone *)zone { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instance = [super allo

arc 模式下 使用宏定义单例模式(gcd 实现单例模式)

// .h文件 #define HMSingletonH(name) + (instancetype)shared##name; // .m文件 #define HMSingletonM(name) static id _instance; + (id)allocWithZone:(struct _NSZone *)zone { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instance = [super al

单例创建及宏实现单例

创建一个类Tool 继承于NSobject 这里用了两种方式创建单例,注释部分代码比较繁琐,非注释部分为GCD,本人感觉看起来比较干净. 如果是在 非ARC状态下运行 需要自定义release,retain,retainCount,防止单例运用时能释放 在.h里添加该类方法 因为一个程序或者一个项目在应用单例时,频率比较高,所以需要大量的创建单例类,然后重复上面的创建,导致代码内容重复,质量不高,因此,我们可以将单例进行宏实现,这样以后再次创建单例时,.h文件里和.m文件里都只需一行代码解决问题

单例的创建的各种方法

单例设计模式: 单例的写法: 1. GCD 实现单例: @interface Singleton : NSObject + (Singleton *)sharedSingleton; <1> @end /***************************************************************/ //Singleton.m #import "Singleton.h" @implementation Singleton static Sin

单例模式:dispatch_once创建单例

无论是爱还是恨,你都需要单例. 什么是单例呢?Wikipedia是如此定义的: 在软件工程中,单例是一种用于实现单例的数学概念,即将类的实例化限制成仅一个对象的设计模式. 或者我的理解是: 单例就是类,但是该类只能实例化出一个对象. 尽管这是单例的实际定义,但在Foundation框架中不一定是这样.比如NSFileManger和NSNotificationCenter,分别通过它们的类方法defaultManager和defaultCenter获取.尽管不是严格意义的单例,这些类方法返回一个可