OC单例快速实现
首先新建一个头文件,定义如下宏:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
// .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 文件 写 SingletonH(MyMethodName)
.m 文件写 SingletonM(MyMethodName)
搞定!
OC单例快速实现的更多相关文章
- OC 单例实现
2. 在.h 文件遵循 <NSCopying,NSMutabalecopying> 3.定义宏,实现任意类型单单例 #define SingleH(name) +(instancetype ...
- oc 单例
单例模式: //static id _instace; // //+ (id)allocWithZone:(struct _NSZone *)zone //{ // static dispatch_o ...
- Swift中的单例的实现方式
单例在iOS日常开发中是一个很常用的模式.对于希望在 app 的生命周期中只应该存在一个的对象,保证对象的唯一性的时候,一般都会使用单例来实现功能.在OC单例的写法如下: @implementatio ...
- OC与Swift单例
OC: +(instancetype)shareNetworkTools{ static id instance; static dispatch_once_t onceToken; //onceTo ...
- ios oc 和 swfit 用dispatch_once 创建单例
网上已经有方法了,我这里就是抄了下,原文链接 http://bj007.blog.51cto.com/1701577/649413 http://blog.csdn.net/u010124617/ar ...
- OC中两种单例实现方式
OC中两种单例实现方式 写在前面 前两天探索了一下C++ 的单例,领悟深刻了许多.今天来看看OC中的单例又是怎么回事.查看相关资料,发现在OC中一般有两种实现单例的方式,一种方式是跟C++ 中类似的常 ...
- 【Swfit】Swift与OC两种语法写单例的区别
Swift与OC两种语法写单例的区别 例如写一个NetworkTools的单例 (1)OC写单例 + (instancetype)sharedNetworkTools { static id inst ...
- iOS快速单例宏
// 单例 #define DECLARE_SHARED_INSTANCE(className) \ + (className *)sharedInstance; #define IMPLEMENT_ ...
- iOS - OC SingleClass 单例类
前言 单例对象能够被整个程序所操作.对于一个单例类,无论初始化单例对象多少次,也只能有一个单例对象存在,并且该对象是全局的,能够被整个系统访问到. 特点: 在内存中只有一个实例 提供一个全局的访问点 ...
随机推荐
- JAVA 设计模式 解释器模式
用途 解释器模式 (Interpreter) 定义一个语言,定义它的文法的一种表示. 并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 解释器模式是一种行为型模式. 结构
- linux专题一之文件描述符、重定向、管道符、tee命令
本节讨论一下几个问题: 1. 文件描述符. 2. 重定向. 3. 管道符 4. tee的用法. 1. 文件描述符. 在linux系统中一切皆文件.文件夹和设备都是文件.如何用来区别不同的文件呢?这里的 ...
- for of 与 for in的区别
遍历数组通常使用for循环,ES5的话也可以使用forEach,ES5具有遍历数组功能的还有map.filter.some.every.reduce.reduceRight等,只不过他们的返回结果不一 ...
- winform 判断鼠标是否在按钮控件范围内
public void MourseLeave() { bool b = this.RectangleToScreen(this.ClientRectangle).Contains(MousePosi ...
- Oracle sqlplus设置显示格式命令详解
/ 运行 SQL 缓冲区 ? [关键词] 对关键词提供 SQL 帮助 @[@] [文件名] [参数列表] 通过指定的参数,运行指定的命令文件 ACC[EPT] 变量 [DEF[AULT] 值] [PR ...
- 介绍开源的.net通信框架NetworkComms框架 源码分析(十六 ) ConnectionStatic
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 许可是 ...
- 为什么很多APP要有启动页面
我们启动APP时,一般都会是一张含有LOGO的图片.这张图片叫做启动页面. 这个启动页面是必须.一定需要的吗?有什么作用? 这是苹果官方对于iOS启动页的设计说明: 为了增强应用程序启动时的用 ...
- C# 通过GPS坐标,计算两点之间距离
之前在网上有很多这种计算的,但是代码都不怎么全.经过多方打听查询.找到完整代码.现将代码共享给大家. 有需要者觉得有用者欢迎使用.觉得用或简单的高手,请绕. public static double ...
- FreeBSD pkg仓库有台湾的镜像了
http://pkg.freebsd.org/ 在这个页面上可以看到: pkg0.bme.freebsd.org pkg0.nyi.freebsd.org pkg0.twn.freebsd.org p ...
- [转]JavaScript程序编码规范
原文:http://javascript.crockford.com/code.html 作者:Douglas Crockford 译文:http://www.yeeyan.com/articles/ ...