美文网首页
Objective-C 宏定义单例

Objective-C 宏定义单例

作者: 4fbc4e24081a | 来源:发表于2017-11-28 11:35 被阅读0次

单例设计模式是开发中经常会被用到的一种设计模式,而且有时候一个项目中会用到多个不同的单例,但是重复的编写创建单例的代码就会显得比较麻烦。如果我们将创建单例的代码以宏的形式定义出来,只需要简单的两句就能实现单例的声明和实现,就可以很容易的避免上面的麻烦.下面讲一下怎么实现宏定义单例.

步骤一

我们先创建一个头文件,将下面的代码声明到这个头文件中:

//声明单例实现入口
#define Singleton_InterFace(singletonName) \
+ (id)shared##singletonName;

//创建单例实现方法
#define Singleton_Implemention(singletonName) \
static  id _singletonInstance = nil; \
+ (id)shared##singletonName \
{ \
    return  [[self alloc] init]; \
} \
+ (id)allocWithZone:(NSZone *)zone \
{ \
    static dispatch_once_t onceToken; \
    dispatch_once(&onceToken, ^{ \
     _singletonInstance = [super allocWithZone:zone]; \
    }); \
   return _singletonInstance; \
} \
- (id)copyWithZone:(NSZone *)zone { \
    return _singletonInstance; \
} \
- (id)mutableCopyWithZone:(NSZone *)zone \
{ \
  return self; \
} \
步骤二

按照步骤一将单例的实现方法以宏的方式定义出来,下面就调用声明好的宏方法:

1.在.h中调用Singleton_InterFace(DataBaseManager);

#import <Foundation/Foundation.h>
#import "xxx.h"//定义宏单例的头文件
@interface HYDataBaseManager : NSObject<NSCopying, NSMutableCopying>
Singleton_InterFace(DataBaseManager);
@end

2.在.m中调用Singleton_Implemention(DataBaseManager);
#import "HYDataBaseManager.h"
@implementation HYDataBaseManager
Singleton_Implemention(DataBaseManager);
@end
步骤三

上面两步以及完成后,接下来我们就来验证一下单例是否正的能创建成功:

//调用下面的方法
- (void)singletonTest {
    HYDataBaseManager *dataBaseManager1 = [HYDataBaseManager shareDataBaseManager];
    HYDataBaseManager *dataBaseManager2 = [HYDataBaseManager shareDataBaseManager];
    NSLog(@"Manager1 == %@", dataBaseManager1);
    NSLog(@"Manager2 == %@", dataBaseManager2);
}
打印输出:
2017-11-28 10:49:39.070465+0800 GCD[1670:75187] Manager1 == <HYDataBaseManager: 0x604000017790>
2017-11-28 10:49:39.070701+0800 GCD[1670:75187] Manager2 == <HYDataBaseManager: 0x604000017790>

从控制台的输出可以看出Manager1和Manager2是同一个对象,所以单例创建成功.

引申: 系统提供的单例设计模式大都是以shared开头,那么我们的写法应该遵循系统的这种命名规范,##就是一个连接符,会将singletonName变量的值拼接在shared后面形成一个方法名,每行末尾的"\"也是C语音的一个连接符.注意,每行之间不能用空行,否则编译的时候会报错,若果需要空行,需要在空行处添加"\"。

相关文章

  • iOS 单例

    Objective-C 单例宏 Swift 单例声明

  • iOS 单例

    单例模式实现不能使用继承 定义单例实现 简写 定义单例实现宏

  • Objective-C 宏定义单例

    单例设计模式是开发中经常会被用到的一种设计模式,而且有时候一个项目中会用到多个不同的单例,但是重复的编写创建单例的...

  • 0922 宏定义通杀单例

    1、单例宏定义源码 说明此宏定义精华就是把声明文件和执行文件都放在宏定义了,而且针对不同的类,生成不同的单例,使用...

  • iOS 单例宏定义记录

    MYSingleton.h : 单例宏定义 - 头文件

  • 宏定义单例

    新建.h文件## 在.h文件中代码如下: 使用方法: 新建类FirstFirst.h中 First.m中 Firs...

  • 单例

    单例 单例宏

  • 宏定义单例类

  • 单例的宏定义

    用宏定义把单例忘了吧。。 #ifndef Singleton_h#define Singleton_h#defin...

  • 单例的宏定义

    序言 单例的使用在我们开发iOS程序的时候的使用率是非常高的,在我们写一个单例的时候,可能不止会用到一个单例,然而...

网友评论

      本文标题:Objective-C 宏定义单例

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