iOS开发之单例头文件

// 帮助实现单例设计模式

// .h文件的实现
#define SingletonH(methodName) + (instancetype)shared##methodName;

// .m文件的实现
#if __has_feature(objc_arc) // 是ARC
#define SingletonM(methodName) static id _instace = nil; + (id)allocWithZone:(struct _NSZone *)zone { if (_instace == nil) { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instace = [super allocWithZone:zone]; }); } return _instace; } - (id)init { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instace = [super init]; }); return _instace; } + (instancetype)shared##methodName { return [[self alloc] init]; } + (id)copyWithZone:(struct _NSZone *)zone { return _instace; } + (id)mutableCopyWithZone:(struct _NSZone *)zone { return _instace; }

#else // 不是ARC

#define SingletonM(methodName) static id _instace = nil; + (id)allocWithZone:(struct _NSZone *)zone { if (_instace == nil) { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instace = [super allocWithZone:zone]; }); } return _instace; } - (id)init { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instace = [super init]; }); return _instace; } + (instancetype)shared##methodName { return [[self alloc] init]; } - (oneway void)release { } - (id)retain { return self; } - (NSUInteger)retainCount { return 1; } + (id)copyWithZone:(struct _NSZone *)zone {     return _instace; }  + (id)mutableCopyWithZone:(struct _NSZone *)zone {     return _instace; }

#endif

将上述代码放进放到.h头文件中

使用方法:在单例的文件中,.h中实现SingletonH(mothodName)(methodName为方法名)

              .m中实现SingletonM(mothodName)

时间: 2024-08-11 01:18:49

iOS开发之单例头文件的相关文章

IOS开发模式——单例

单例的模式在网上有很多,今天发下我个人对单例模式的理解.整个app中只存在一个实例,也只会进行一次实例,在实例完成之后是不可以人释放的(当App关闭之后,等系统自己回收). 也就是说,如果我们写得某个类符合了上述条件,那么我们也可以称这个类为单例. 在非ARC的工程中,我们需要针对alloc,retain,copy等会增加retaincount的参数加以控制,对release和autorelease等减少retailcount的操作增加控制,以确保单一实例,绝不释放. 在ARC的工厂中,由于,内

iOS开发之单例设计模式(完整正确版本)

单例的意思从字面上就可以略知一二,所谓单例就是确保在程序运行过程中只创建一个对象实例.可以用于需要被多次广泛或者说多次使用的资源中,比如我们常见的网络请求类.工具类以及其它管理类等.比如我iOS开发中常见的系统单例[UIApplication sharedApplication].[NSUserDefaults  standardUserDefaults]等.在iOS开发中,单例模式是非常有用的一种设计模式.如下图,是一个简单的例模式的UML类图. 一.使用单例模式的作用 它可以保证某个类在程序

IOS开发之单例设计模式

本文将从四个方面对IOS开发中的单例设计模式进行讲解: 一.什么是单例设计模式 二.我们为什么要用单例设计模式 三.单例设计模式的基本用法 四.自定义单例设计模式代码的封装 一.什么是单例设计模式 所谓单例,即是单个的实例化对象,保证一个类有且仅有一个实例.通常情况下,当我们对一个类实例化时(如:alloc.new等),并不能保证每次实例化的对象是唯一的实例.那么为了保证该类可在多次实例化的过程中保证内存地址不变,就需要引入单例设计模式. 二.我们为什么要用单例设计模式 1.Singleton

iOS开发之——单例的几种设计方式

单例是ios开发中常用的一种设计模式,通常用来控制器之间传值.方便.高效,全局通用. 单例模式的设计分为ARC和MRC. ARC: 方式一 1.创建一个继承自NSObject的类. 2.在这个类的.h文件中声明类方法: + (instancetype)sharedInstance; 2.在这个类的.m文件中实现以下方法: static id instance; + (instancetype)sharedInstance { static dispatch_once_t onceToken; d

单例头文件

1 // 帮助实现单例设计模式 2 3 // .h文件的实现 4 #define SingletonH(methodName) + (instancetype)shared##methodName; 5 6 // .m文件的实现 7 #if __has_feature(objc_arc) // 是ARC 8 #define SingletonM(methodName) 9 static id _instace = nil; 10 + (id)allocWithZone:(struct _NSZo

oc快速生成单例头文件解析

// .h文件 #define HMSingletonH(name) + (instancetype)shared##name; // .m文件 #if __has_feature(objc_arc) #define HMSingletonM(name) static id _instace; + (id)allocWithZone:(struct _NSZone *)zone { static dispatch_once_t onceToken; dispatch_once(&onceToke

iOS开发中遇到的头文件找不到的问题解决办法

有时会遇到莫名其妙的明明有这个文件,但是就是显示头文件找不到~下面讲下我的解决办法~ 先找到这里Search Paths 喏~~这一行,双击他!! 弹出来个框框~修改成这个样子,回车!搞定了!再运行试试~头文件找的到了吧O(∩_∩)O~

iOS开发-一些单例的类

UIApplication(应用程序实例) NSNotificationCenter(消息中心)  NSFileManager(文件管理)    NSUserDefaults(应用程序设置)     NSURLCache(请求缓存)   NSHTTPCookieStorage(应用程序cookies池)

iOS开发- 文件共享(利用iTunes导入文件, 并且显示已有文件)

今天要实现一个功能, 通过iTunes导入文件到应用中, 并且在应用中对这个文件进行编辑. 类似我们平时经常使用的 PDF阅读器那样的东西, 我们可以自己导入我们的电子书. 源码下载:https://github.com/colin1994/iTunesTest.git 下面具体介绍下实现过程. 先看效果图. 图1. 未实现功能前, iTunes截图 图2. 实现功能后, iTunes截图 图3. 实现功能后, 运行截图. 好了, 通过图片, 我们可以看到实现的效果. 功能包括: 允许通过iTu