在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 ...
随机推荐
-
makefile:2: *** 遗漏分隔符 。 停止
from http://hi.baidu.com/��֮��/blog/item/8ec00e2aca65a525d42af11b.html 我们在编写完makefile,然后在终端中 $make出现 ...
-
实例源码--Android简单团购应用源码
下载源码 技术要点: 1.HTTP通信技术 2.XML数据解析 3.控件的简单应用 4.源码带有非常详细的中文 注释 ...... 详细介绍: 1. HTTP通信技术 通 过HTTP通信技术, ...
-
vs2015Update2的一个坑
最近更新了vs2015到update2,然后,蛋疼的事情就来了. 首先发现QT不能用了 boost编译也出问题了 查找了2天,发现问题所在,在于windows sdk更新 10.0.10586.0 了 ...
-
[原创]ubuntu14.04部署ELK+redis日志分析系统
ubuntu14.04部署ELK+redis日志分析系统 [环境] host1:172.17.0.4 搭建ELK+redis服务 host2:172.17.0.3 搭建logstash+nginx服务 ...
-
iOS下JS与OC互相调用(六)--WKWebView + WebViewJavascriptBridge
上一篇文章介绍了UIWebView 如何通过WebViewJavascriptBridge 来实现JS 与OC 的互相调用,这一篇来介绍一下WKWebView 又是如何通过WebViewJavascr ...
-
android异步任务处理(网络等耗时操作)
在实际应用中经常会遇到比较耗时任务的处理,比如网络连接,数据库操作等情况时,如果这些操作都是放在主线程(UI线程)中,则会造成UI的假死现象(android4.0后也不许放在UI线程),这可以使用As ...
-
Redis-五种数据类型解析
redis 五种数据结构详解(string,list,set,zset,hash) Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存 ...
-
Apps: Help >; Diagnostics >; Custom Code >; Personalize 查看LOV中的查询语句
Apps Menu Path: Help > Diagnostics > Custom Code > Personalize 查看LOV中的查询语句 一直有实施顾问询问我XXFo ...
-
mysql主从同步碰到的问题
一.mysql 安装https://www.cnblogs.com/jxrichar/p/9248480.html二.主从配置参考https://www.cnblogs.com/superfat/p/ ...
-
Tomcat6连接数设置:permsize
Tomcat6默认配置,在后台一阵全点击服务器就报废了,查了一下就要是PERMSIZE默认值过小造成(16-64) TOMCAT_HOME/bin/catalina.sh 添加一行:JAVA_OPTS ...