iOS-----写一个规范的单例--->
1.集成了一个宏
2.两句代码集成单例
3.一句代码调用单例
------------->
1.集成了一个宏
//这里就要注意了,因为每个单例中,方法名可以不一样,那么我们就不能把名字写死,要灵活自定义,那么就要调用的时候给他传名啊,那么!!!要注意连接符号##的使用,传进来的参数要放到连接符号后面如下
#define iVanSingletonH(name) +(instancetype)shared##name;
//注意这里,一般宏只会判断 宏的名字后面跟着那段是它的代码,所以要加\符号告诉他,下一行也是他管理的代码
#pragma 注意这里类型要写成id类型,因为它接收的单例是不同类型的
#define iVanSingletonM(name) \
static id _##name;\
\
+(instancetype)allocWithZone:(struct _NSZone *)zone\
{\
static dispatch_once_t onceToken;\
dispatch_once(&onceToken, ^{\
_##name = [super allocWithZone:zone];\
});\
return _##name;\
}\
+(instancetype)shared##name\
{\
static dispatch_once_t onceToken;\
dispatch_once(&onceToken, ^{\
_##name = [[self alloc]init];\
});\
return _##name;\
}\
-(id)copyWithZone:(NSZone *)zone\
{\
return _##name;\
}
2.两句代码集成单例
想写单例的编码区的.h文件 写一句代码:
iVanSingletonH(name) ,name写实际上你想调用的单例的方法名
在相应的.m文件 写一句代码:
iVanSingletonM(name),name写实际上你想调用的单例的方法名(和上面.h文件的name一致)
3.一句代码调用单例
在想要调用单例的地方,导入单例的头文件 :
#import “ClassName.h”
调用代码:
[ClassName shareName];
iOS-----写一个规范的单例--->的更多相关文章
- 【iOS】ARC-MRC下的单例及其应用
单例的应用十分普遍,单例模式使一个类仅仅有一个实例. *易于供外界訪问. *方便控制实例个数,节约系统资源. *OC中的常见单例: 如:UIApplication, NSNotificationCe ...
- iOS——Swift开发中的单例设计模式(摘译,非原创)
最近在开发一个小的应用,遇到了一些Objective-c上面常用的单例模式,但是swift上面还是有一定区别的,反复倒来倒去发现不能按常理(正常的oc to swift的方式)出牌,因此搜索了一些帖子 ...
- iOS中浅淡UIApplication单例-b
在iOS的操作系统中 每一个程序都对应一个application单例,每一个application都对应一个Appdelegate代理,在代理中控制程序的各个状态.我们在程序中获取Applicatio ...
- IOS设计模式第二篇之单例设计模式
现在我们的组件已经有组织了.你需要从其他的地方得到数据,你也可以创建一个API类管理数据这个下个设计模式单例里面介绍. 这个单例设计模式确保这个类仅仅拥有一个实例,并且为这个实例提供一个全局的访问点. ...
- iOS开发中常用的单例
定义:一个类的对象,无论在何时创建.无论创建多少次,创建出来的对象都是同一个对象. 使用场景:当有一些数据需要共享给别的类的时候,就可以把这些数据保存在单例对象中. 关键代码: + (instan ...
- iOS 页面间传值 之 单例传值 , block 传值
ios 页面间传值有许多,前边已经分享过属性传值和代理传值,今天主要说一下单例传值和 block 传值 单例传值:单例模式一种常用的开发的模式,单例因为在整个程序中无论在何时初始化对象,获取到的都是同 ...
- python:什么是单例?一个简单的单例
单例:即一个类只能生成唯一的一个实例,python中的类如果没有被实例化,则cls._instance为None 如下: class Singleton(object): def __new__(cl ...
- iOS 一个简单的单例
比如我有一个Singleton的类(DemoStatusManage),他有一个实例方法currentStatus会返回一个1-100的随机数. @interface DemoStatusManage ...
- IOS写一个能够支持全屏的WebView
这样来写布局 一个TitleView作为顶部搜索栏: @implementation TitleView - (id)initWithFrame:(CGRect)frame { self = [sup ...
随机推荐
- 《DSP using MATLAB》示例Example5.17
- Vue - 事件绑定
1.内联方式: A:将事件处理器绑定到一个方法中,以下所有事件都以click事件作为案例 注意:内联方式下事件处理器只能绑定一个方法,要是想要绑定多个方法,依旧还是使用js中的addEventList ...
- Idea中包内中的置文件如何发布到编译后的目录中去
1.问题引入: 运行一个maven+springmvc+hibernate的项目的时候出现了下边的错误: Caused by: java.io.FileNotFoundException: class ...
- 深入理解定时器系列——被誉为神器的requestAnimationFrame
与setTimeout和setInterval不同,requestAnimationFrame不需要设置时间间隔.这有什么好处呢?为什么requestAnimationFrame被称为神器呢?本文将详 ...
- 如何设置GridView中某个字段显示数据的一部分?
后台方法: /// <summary> /// 截取字符串 /// </summary> /// <param name="str">要截取的字 ...
- IDEA+Tomcat+JRebel热部署1
所需资源下载: jrebel_6.4.2a 概述 JRebel是一个J2EE热部署的工具.使用它可以减少浪费8-18%的开发时间在项目的构建和部署上.之前只是听说过,一直没有实践,今天实际使用了一把 ...
- Torch7学习笔记(二)nn Package
神经网络Package [目前还属于草稿版,等我整个学习玩以后会重新整理] 模块Module module定义了训练神经网络需要的所有基础方法,并且是可以序列化的抽象类. module有两种状态变量: ...
- 深入浅出 妙用Javascript中apply、call、bind
apply.call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. Jav ...
- opengles 矩阵计算
总的变换矩阵: matrix = projection * view * model 模型矩阵: modelMatrix=translateMatrix * scaleMatrix * rotateM ...
- 拯救无法启动的虚拟机文件.vmdk中的数据
FROM: http://blog.csdn.net/npy_lp/article/details/7686583 从事Linux开发的软件工程师几乎都使用过虚拟机软件,如VMware worksta ...