zoukankan      html  css  js  c++  java
  • 单例头文件

     1 // 帮助实现单例设计模式
     2 
     3 // .h文件的实现
     4 #define SingletonH(methodName) + (instancetype)shared##methodName;
     5 
     6 // .m文件的实现
     7 #if __has_feature(objc_arc) // 是ARC
     8 #define SingletonM(methodName) 
     9 static id _instace = nil; 
    10 + (id)allocWithZone:(struct _NSZone *)zone 
    11 { 
    12 if (_instace == nil) { 
    13 static dispatch_once_t onceToken; 
    14 dispatch_once(&onceToken, ^{ 
    15 _instace = [super allocWithZone:zone]; 
    16 }); 
    17 } 
    18 return _instace; 
    19 } 
    20 
    21 - (id)init 
    22 { 
    23 static dispatch_once_t onceToken; 
    24 dispatch_once(&onceToken, ^{ 
    25 _instace = [super init]; 
    26 }); 
    27 return _instace; 
    28 } 
    29 
    30 + (instancetype)shared##methodName 
    31 { 
    32 return [[self alloc] init]; 
    33 } 
    34 + (id)copyWithZone:(struct _NSZone *)zone 
    35 { 
    36 return _instace; 
    37 } 
    38 
    39 + (id)mutableCopyWithZone:(struct _NSZone *)zone 
    40 { 
    41 return _instace; 
    42 }
    43 
    44 #else // 不是ARC
    45 
    46 #define SingletonM(methodName) 
    47 static id _instace = nil; 
    48 + (id)allocWithZone:(struct _NSZone *)zone 
    49 { 
    50 if (_instace == nil) { 
    51 static dispatch_once_t onceToken; 
    52 dispatch_once(&onceToken, ^{ 
    53 _instace = [super allocWithZone:zone]; 
    54 }); 
    55 } 
    56 return _instace; 
    57 } 
    58 
    59 - (id)init 
    60 { 
    61 static dispatch_once_t onceToken; 
    62 dispatch_once(&onceToken, ^{ 
    63 _instace = [super init]; 
    64 }); 
    65 return _instace; 
    66 } 
    67 
    68 + (instancetype)shared##methodName 
    69 { 
    70 return [[self alloc] init]; 
    71 } 
    72 
    73 - (oneway void)release 
    74 { 
    75 
    76 } 
    77 
    78 - (id)retain 
    79 { 
    80 return self; 
    81 } 
    82 
    83 - (NSUInteger)retainCount 
    84 { 
    85 return 1; 
    86 } 
    87 + (id)copyWithZone:(struct _NSZone *)zone 
    88 { 
    89     return _instace; 
    90 } 
    91  
    92 + (id)mutableCopyWithZone:(struct _NSZone *)zone 
    93 { 
    94     return _instace; 
    95 }
    96 
    97 #endif
  • 相关阅读:
    1. Deep Q-Learning
    Ⅶ. Policy Gradient Methods
    Ⅴ. Temporal-Difference Learning
    idea在service窗口中显示多个服务
    pycharm下运行flask框架的脚本时报错
    windows下部署 flask (win10+flask+nginx)
    pip install selenium报错解决方法
    pip 及 selenium安装命令
    动作捕捉系统用于模仿学习
    柔性微创手术机器人性能实验验证
  • 原文地址:https://www.cnblogs.com/ndyBlog/p/3995774.html
Copyright © 2011-2022 走看看