2. 在.h 文件遵循 <NSCopying,NSMutabalecopying>

3.定义宏,实现任意类型单单例

  1. #define SingleH(name) +(instancetype)share##name;
  2.  
  3. #if __has_feature(objc_arc)
  4. //条件满足 ARC
  5. #define SingleM(name) static id _instance;\
  6. +(instancetype)allocWithZone:(struct _NSZone *)zone\
  7. {\
  8. static dispatch_once_t onceToken;\
  9. dispatch_once(&onceToken, ^{\
  10. _instance = [super allocWithZone:zone];\
  11. });\
  12. \
  13. return _instance;\
  14. }\
  15. \
  16. +(instancetype)share##name\
  17. {\
  18. return [[self alloc]init];\
  19. }\
  20. \
  21. -(id)copyWithZone:(NSZone *)zone\
  22. {\
  23. return _instance;\
  24. }\
  25. \
  26. -(id)mutableCopyWithZone:(NSZone *)zone\
  27. {\
  28. return _instance;\
  29. }
  30.  
  31. #else
  32. //MRC
  33. #define SingleM(name) static id _instance;\
  34. +(instancetype)allocWithZone:(struct _NSZone *)zone\
  35. {\
  36. static dispatch_once_t onceToken;\
  37. dispatch_once(&onceToken, ^{\
  38. _instance = [super allocWithZone:zone];\
  39. });\
  40. \
  41. return _instance;\
  42. }\
  43. \
  44. +(instancetype)share##name\
  45. {\
  46. return [[self alloc]init];\
  47. }\
  48. \
  49. -(id)copyWithZone:(NSZone *)zone\
  50. {\
  51. return _instance;\
  52. }\
  53. \
  54. -(id)mutableCopyWithZone:(NSZone *)zone\
  55. {\
  56. return _instance;\
  57. }\
  58. -(oneway void)release\
  59. {\
  60. }\
  61. \
  62. -(instancetype)retain\
  63. {\
  64. return _instance;\
  65. }\
  66. \
  67. -(NSUInteger)retainCount\
  68. {\
  69. return MAXFLOAT;\
  70. }
  71. #endif

  
4.使用 括号里的名字 自己定义,但是h和m文件要一样

在 .h文件

在.m文件

OC 单例实现的更多相关文章

  1. 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 ...

  2. oc 单例

    单例模式: //static id _instace; // //+ (id)allocWithZone:(struct _NSZone *)zone //{ // static dispatch_o ...

  3. Swift中的单例的实现方式

    单例在iOS日常开发中是一个很常用的模式.对于希望在 app 的生命周期中只应该存在一个的对象,保证对象的唯一性的时候,一般都会使用单例来实现功能.在OC单例的写法如下: @implementatio ...

  4. OC与Swift单例

    OC: +(instancetype)shareNetworkTools{ static id instance; static dispatch_once_t onceToken; //onceTo ...

  5. ios oc 和 swfit 用dispatch_once 创建单例

    网上已经有方法了,我这里就是抄了下,原文链接 http://bj007.blog.51cto.com/1701577/649413 http://blog.csdn.net/u010124617/ar ...

  6. OC中两种单例实现方式

    OC中两种单例实现方式 写在前面 前两天探索了一下C++ 的单例,领悟深刻了许多.今天来看看OC中的单例又是怎么回事.查看相关资料,发现在OC中一般有两种实现单例的方式,一种方式是跟C++ 中类似的常 ...

  7. 【Swfit】Swift与OC两种语法写单例的区别

    Swift与OC两种语法写单例的区别 例如写一个NetworkTools的单例 (1)OC写单例 + (instancetype)sharedNetworkTools { static id inst ...

  8. iOS - OC SingleClass 单例类

    前言 单例对象能够被整个程序所操作.对于一个单例类,无论初始化单例对象多少次,也只能有一个单例对象存在,并且该对象是全局的,能够被整个系统访问到. 特点: 在内存中只有一个实例 提供一个全局的访问点 ...

  9. iOS开发——多线程OC篇&多线程中的单例

    多线程中的单例 #import "DemoObj.h" @implementation DemoObj static DemoObj *instance; // 在iOS中,所有对 ...

随机推荐

  1. 深入理解yield(二):yield与协程

    转自:http://blog.beginman.cn/blog/133/ 协程概念 1.并发编程的种类:多进程,多线程,异步,协程 2.进程,线程,协程的概念区别: 进程.线程和协程的理解 进程:拥有 ...

  2. 让MySql支持Emoji表情(MySQL中4字节utf8字符保存方法)

    手机端插入Emoji表情,保存到数据库时报错: Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x84' ...

  3. ECCV 2018 | 旷视科技提出GridFace:通过学习局部单应变换实现人脸校正

    全球计算机视觉三大顶会之一 ECCV 2018(European Conference on Computer Vision)即将于 9 月 8 -14 日在德国慕尼黑拉开帷幕,旷视科技有多篇论文被此 ...

  4. mysql更新(四) 数据类型

    07-数据类型   介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考链接:http://www.runoob.com/mysql/m ...

  5. C关键字typedef及argc,argv,env参数含义

    C关键字typedef--为C中各种数据类型定义别名. 在此插一点C知识 int main(int argc,const char *argv[],const char *envp[])主函数的红色部 ...

  6. 尝试了一些时间,最简单的apache上设置用IP访问一个虚拟目录

    就是其实新建一个 多域名访问的设置 <VirtualHost *:80> DocumentRoot /var/www/ ServerName IP</VirtualHost> ...

  7. mock单测

    mockMvc执行流程总结: 整个过程:1.mockMvc.perform执行一个请求:2.MockMvcRequestBuilders.get("/user/1")构造一个请求3 ...

  8. HTML5 通过文件输入框读取文件为base64文件, 并借助canvas压缩 FileReader, files, drawImage

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  9. leetcode166

    public class Solution { public String fractionToDecimal(int numerator, int denominator) { HashMap< ...

  10. 机器学习入门-使用GridSearch进行网格参数搜索GridSeach(RandomRegressor(), param_grid, cv=3)

    1.GridSeach(RandomRegressor(), param_grid, cv=3) GridSearch第一个参数是算法本身, 第二个参数是传入的参数组合, cv表示的是交叉验证的次数 ...