iOS 开发中的单例
在iOS开发中经常会用到单例,比如每个iOS程序本身就是一个单例,在比如进行个人偏好设置存储的时候用的也是一个单例。那我们如何自己来写一个单例类呢,用自己的单例对象呢?下面是我写的一个单例的头文件里的代码,这个文件主要是一些宏。使用步骤写的都很详细,ARC或MRC都可以使用。有了这个头文件,只要在使用的时候包含这个文件,基本上就OK了。具体怎么使用,下面有详细说明。
// Singleton.h
// 单例的宏
/*
使用方法
1:包含这个头文件
2:在.h文件总包含 singleton_h(name) 里面的name是你想要生成单例对象时的名字
3:在.m文件中包含 singleton_m(name) 里面的name是你想要生成单例对象时的名字
注意2、3步中的name要一致
4:写init初始化方法,因为每个单例类初始化的内容不一样,所以没有写到宏里面,在创建单例类时记得写init方法
5: 创建单例对象 [ 类名 share+(name)]
例如我们创建一个Person类的单例: 1 在Person的.h 文件中 singleton_h(Person)
2 在Person的.m 文件中 singleton_m(Person)
3 在Person的.m文件中写初始化方法
-(instancetype)init{
static id obj;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
if ((obj = [super init])) {
//这里进行本类的初始化
}
});
self = obj;
return self;
}
}
4 在使用的地方包含Person这个类的头文件 [ Person sharePerson ];
// ## :连接字符串和参数
// \ :表示下一行也是当前行的内容
*/
#ifndef Singleton_h
#define Singleton_h
#define singleton_h(name) +(instancetype)share##name;
#if __has_feature(objc_arc) // ARC
#define singleton_m(name) \
static id instance;\
+(instancetype)allocWithZone:(struct _NSZone *)zone{\
\
static dispatch_once_t onceToken;\
dispatch_once(&onceToken, ^{\
instance = [super allocWithZone:zone];\
});\
\
return instance;\
}\
\
+(instancetype)share##name{\
return [[self alloc]init];\
}\
+(id)copyWithZone:(struct _NSZone *)zone{\
return instance;\
}
#else //非ARC
#define singleton_m(name) \
static id instance;\
+(instancetype)allocWithZone:(struct _NSZone *)zone{\
\
static dispatch_once_t onceToken;\
dispatch_once(&onceToken, ^{\
instance = [super allocWithZone:zone];\
});\
\
return instance;\
}\
\
+(instancetype)share##name{\
return [[self alloc]init];\
}\
\
-(oneway void)release{\
\
\
}\
-(instancetype)autorelease{\
return instance;\
}\
\
-(instancetype)retain{\
return instance;\
}\
\
+(id)copyWithZone:(struct _NSZone *)zone{\
return instance;\
}\
\
-(NSUInteger)retainCount{\
return 1;\
}
#endif
#endif
iOS 开发中的单例的更多相关文章
- iOS——Swift开发中的单例设计模式(摘译,非原创)
最近在开发一个小的应用,遇到了一些Objective-c上面常用的单例模式,但是swift上面还是有一定区别的,反复倒来倒去发现不能按常理(正常的oc to swift的方式)出牌,因此搜索了一些帖子 ...
- iOS--Swift开发中的单例设计模式
最近在开发一个小的应用,遇到了一些Objective-c上面常用的单例模式,但是swift上面还是有一定区别的,反复倒来倒去发现不能按常理(正常的oc to swift的方式)出牌,因此搜索了一些帖子 ...
- 【iOS开发】创建单例的两种方法
创建一个单例很多办法.我先列举一个苹果官方文档中的写法. [cpp] view plaincopy static AccountManager *DefaultManager = nil; + ( ...
- iOS多线程中的单例
#import "MyHandle.h" static MyHandle *handle = nil; @implementation MyHandle // 传统写法 // 此时 ...
- iOS开发——Swift篇&单例的实现
Swift实现单例模式 Swift实现单例模式 由于Swift语言弱化了struct和class之间的界限,这里我分别给出自己写的两种的单例实现 class版本: class SwiftSinglet ...
- iOS开发——多线程OC篇&多线程中的单例
多线程中的单例 #import "DemoObj.h" @implementation DemoObj static DemoObj *instance; // 在iOS中,所有对 ...
- IOS中的单例设计模式
单例设计模式是IOS开发中一种很重要很常用的一种设计模式.它的设计原理是无论请求多少次,始终返回一个实例,也就是一个类只有一个实例.下面是苹果官方文档中关于单例模式的图片: 如图所示,左边的图是默认的 ...
- 在iOS开发中使用FMDB
在iOS开发中使用FMDB 前言 SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.iOS SDK 很早就支持了 SQLite,在使用时,只需 ...
- IOS:利用dispatch_once创建单例
在之前有一篇学习笔记中,记载了一篇如何在OC中实现单例的文章:<IOS学习笔记4—Objective C—创建单例>自苹果引入了Grand Central Dispatch (GCD)(M ...
随机推荐
- 【HTML】Intermediate6:Text: Addresses, Definitions, Bi-directional, and Editorial
1.</address> It should be used specifically for the contact details relating either to the ent ...
- windows下virtualenv使用报错
virtualenv为python提供了一个独立的虚拟环境,使各种python依赖库的安装相互独立.在家里ubuntu上安装一切正常,但在公司的win7上安装总是报以下错误: "D:\Pro ...
- about云开发虚拟化资源汇总,持续更新
H3C实验手册H3C实验手册内容包括:1.帧中继典型配置举例一2.典型访问列表和地址转换综合应用配置案例3.交换机基本配置4.轮循DCC配置举例5.X.25典型配置举例6.MultiLink PPP配 ...
- HW2.21
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- algorithm@ Matrix fast power
一. 什么是快速幂: 快速幂顾名思义,就是快速算某个数的多少次幂.其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高.一般一个矩阵的n次方,我们会通过连乘n-1次来得到它的n次 ...
- 问题-delphi在某电脑(win7)上是界面超乱 DPL
问题现象:本机运行正常,但是在WIN7或个别的XP上,界面显示控件大小不一,界面超乱 问题原因:可以百度“delphi dpi”或者“delphi 控件自适应分辨率” 问题处理:将窗体的Scaled设 ...
- [二]SpringMvc实践-注解
1.@RequestMapping("/list")映射访问路径 2.@RequestParam(value="id",required=false)请求参数, ...
- C#使用参数数组
重载,是指在相同的作用域内,声明多个同名的方法.用以对不同类型或数量的参数的参数执行相同的操作.比如,可以求两个或者三个 int类型数中的最大值,我们可以编写这样的方法实现: class Util { ...
- eclipse设置快捷键sysout+Alt+/后出System.out.println!亲測可用!
曾经一直用myeclipse,没有这方面的顾虑,如今换到了eclipse,非常多要自己设置了,比方非常多快捷键. 最经常使用的,执行到sysout ,eclipse总是不自己主动补全,非常是恼火!!! ...
- [React] React Fundamentals: Accessing Child Properties
When you're building your React components, you'll probably want to access child properties of the m ...