OC 单例实现
2. 在.h 文件遵循 <NSCopying,NSMutabalecopying>
3.定义宏,实现任意类型单单例
- #define SingleH(name) +(instancetype)share##name;
- #if __has_feature(objc_arc)
- //条件满足 ARC
- #define SingleM(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:(NSZone *)zone\
- {\
- return _instance;\
- }\
- \
- -(id)mutableCopyWithZone:(NSZone *)zone\
- {\
- return _instance;\
- }
- #else
- //MRC
- #define SingleM(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:(NSZone *)zone\
- {\
- return _instance;\
- }\
- \
- -(id)mutableCopyWithZone:(NSZone *)zone\
- {\
- return _instance;\
- }\
- -(oneway void)release\
- {\
- }\
- \
- -(instancetype)retain\
- {\
- return _instance;\
- }\
- \
- -(NSUInteger)retainCount\
- {\
- return MAXFLOAT;\
- }
- #endif
4.使用 括号里的名字 自己定义,但是h和m文件要一样
在 .h文件
在.m文件
OC 单例实现的更多相关文章
- 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 ...
- 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 - OC SingleClass 单例类
前言 单例对象能够被整个程序所操作.对于一个单例类,无论初始化单例对象多少次,也只能有一个单例对象存在,并且该对象是全局的,能够被整个系统访问到. 特点: 在内存中只有一个实例 提供一个全局的访问点 ...
- iOS开发——多线程OC篇&多线程中的单例
多线程中的单例 #import "DemoObj.h" @implementation DemoObj static DemoObj *instance; // 在iOS中,所有对 ...
随机推荐
- 深入理解yield(二):yield与协程
转自:http://blog.beginman.cn/blog/133/ 协程概念 1.并发编程的种类:多进程,多线程,异步,协程 2.进程,线程,协程的概念区别: 进程.线程和协程的理解 进程:拥有 ...
- 让MySql支持Emoji表情(MySQL中4字节utf8字符保存方法)
手机端插入Emoji表情,保存到数据库时报错: Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x84' ...
- ECCV 2018 | 旷视科技提出GridFace:通过学习局部单应变换实现人脸校正
全球计算机视觉三大顶会之一 ECCV 2018(European Conference on Computer Vision)即将于 9 月 8 -14 日在德国慕尼黑拉开帷幕,旷视科技有多篇论文被此 ...
- mysql更新(四) 数据类型
07-数据类型 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考链接:http://www.runoob.com/mysql/m ...
- C关键字typedef及argc,argv,env参数含义
C关键字typedef--为C中各种数据类型定义别名. 在此插一点C知识 int main(int argc,const char *argv[],const char *envp[])主函数的红色部 ...
- 尝试了一些时间,最简单的apache上设置用IP访问一个虚拟目录
就是其实新建一个 多域名访问的设置 <VirtualHost *:80> DocumentRoot /var/www/ ServerName IP</VirtualHost> ...
- mock单测
mockMvc执行流程总结: 整个过程:1.mockMvc.perform执行一个请求:2.MockMvcRequestBuilders.get("/user/1")构造一个请求3 ...
- HTML5 通过文件输入框读取文件为base64文件, 并借助canvas压缩 FileReader, files, drawImage
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- leetcode166
public class Solution { public String fractionToDecimal(int numerator, int denominator) { HashMap< ...
- 机器学习入门-使用GridSearch进行网格参数搜索GridSeach(RandomRegressor(), param_grid, cv=3)
1.GridSeach(RandomRegressor(), param_grid, cv=3) GridSearch第一个参数是算法本身, 第二个参数是传入的参数组合, cv表示的是交叉验证的次数 ...