iOS开发中那些高效常用的宏

时间:2022-12-08 16:39:23
    1. #ifndef MacroDefinition_h
    2. #define MacroDefinition_h
    3. //-------------------获取设备大小-------------------------
    4. //NavBar高度
    5. #define NavigationBar_HEIGHT 44
    6. //获取屏幕 宽度、高度
    7. #define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)
    8. #define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)
    9. //-------------------获取设备大小-------------------------
    10. //-------------------打印日志-------------------------
    11. //DEBUG  模式下打印日志,当前行
    12. #ifdef DEBUG
    13. #   define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
    14. #else
    15. #   define DLog(...)
    16. #endif
    17. //重写NSLog,Debug模式下打印日志和当前行数
    18. #if DEBUG
    19. #define NSLog(FORMAT, ...) fprintf(stderr,"\nfunction:%s line:%d content:%s\n", __FUNCTION__, __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
    20. #else
    21. #define NSLog(FORMAT, ...) nil
    22. #endif
    23. //DEBUG  模式下打印日志,当前行 并弹出一个警告
    24. #ifdef DEBUG
    25. #   define ULog(fmt, ...)  { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"%s\n [Line %d] ", __PRETTY_FUNCTION__, __LINE__] message:[NSString stringWithFormat:fmt, ##__VA_ARGS__]  delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; }
    26. #else
    27. #   define ULog(...)
    28. #endif
    29. #define ITTDEBUG
    30. #define ITTLOGLEVEL_INFO     10
    31. #define ITTLOGLEVEL_WARNING  3
    32. #define ITTLOGLEVEL_ERROR    1
    33. #ifndef ITTMAXLOGLEVEL
    34. #ifdef DEBUG
    35. #define ITTMAXLOGLEVEL ITTLOGLEVEL_INFO
    36. #else
    37. #define ITTMAXLOGLEVEL ITTLOGLEVEL_ERROR
    38. #endif
    39. #endif
    40. // The general purpose logger. This ignores logging levels.
    41. #ifdef ITTDEBUG
    42. #define ITTDPRINT(xx, ...)  NSLog(@"%s(%d): " xx, __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
    43. #else
    44. #define ITTDPRINT(xx, ...)  ((void)0)
    45. #endif
    46. // Prints the current method's name.
    47. #define ITTDPRINTMETHODNAME() ITTDPRINT(@"%s", __PRETTY_FUNCTION__)
    48. // Log-level based logging macros.
    49. #if ITTLOGLEVEL_ERROR <= ITTMAXLOGLEVEL
    50. #define ITTDERROR(xx, ...)  ITTDPRINT(xx, ##__VA_ARGS__)
    51. #else
    52. #define ITTDERROR(xx, ...)  ((void)0)
    53. #endif
    54. #if ITTLOGLEVEL_WARNING <= ITTMAXLOGLEVEL
    55. #define ITTDWARNING(xx, ...)  ITTDPRINT(xx, ##__VA_ARGS__)
    56. #else
    57. #define ITTDWARNING(xx, ...)  ((void)0)
    58. #endif
    59. #if ITTLOGLEVEL_INFO <= ITTMAXLOGLEVEL
    60. #define ITTDINFO(xx, ...)  ITTDPRINT(xx, ##__VA_ARGS__)
    61. #else
    62. #define ITTDINFO(xx, ...)  ((void)0)
    63. #endif
    64. #ifdef ITTDEBUG
    65. #define ITTDCONDITIONLOG(condition, xx, ...) { if ((condition)) { \
    66. ITTDPRINT(xx, ##__VA_ARGS__); \
    67. } \
    68. } ((void)0)
    69. #else
    70. #define ITTDCONDITIONLOG(condition, xx, ...) ((void)0)
    71. #endif
    72. #define ITTAssert(condition, ...)                                       \
    73. do {                                                                      \
    74. if (!(condition)) {                                                     \
    75. [[NSAssertionHandler currentHandler]                                  \
    76. handleFailureInFunction:[NSString stringWithUTF8String:__PRETTY_FUNCTION__] \
    77. file:[NSString stringWithUTF8String:__FILE__]  \
    78. lineNumber:__LINE__                                  \
    79. description:__VA_ARGS__];                             \
    80. }                                                                       \
    81. } while(0)
    82. //---------------------打印日志--------------------------
    83. //----------------------系统----------------------------
    84. //获取系统版本
    85. #define IOS_VERSION [[[UIDevice currentDevice] systemVersion] floatValue]
    86. #define CurrentSystemVersion [[UIDevice currentDevice] systemVersion]
    87. //获取当前语言
    88. #define CurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0])
    89. //判断是否 Retina屏、设备是否%fhone 5、是否是iPad
    90. #define isRetina ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO)
    91. #define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)
    92. #define isPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    93. //判断是真机还是模拟器
    94. #if TARGET_OS_IPHONE
    95. //iPhone Device
    96. #endif
    97. #if TARGET_IPHONE_SIMULATOR
    98. //iPhone Simulator
    99. #endif
    100. //检查系统版本
    101. #define SYSTEM_VERSION_EQUAL_TO(v)                  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
    102. #define SYSTEM_VERSION_GREATER_THAN(v)              ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
    103. #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
    104. #define SYSTEM_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
    105. #define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)
    106. //----------------------系统----------------------------
    107. //----------------------内存----------------------------
    108. //使用ARC和不使用ARC
    109. #if __has_feature(objc_arc)
    110. //compiling with ARC
    111. #else
    112. // compiling without ARC
    113. #endif
    114. #pragma mark - common functions
    115. #define RELEASE_SAFELY(__POINTER) { [__POINTER release]; __POINTER = nil; }
    116. //释放一个对象
    117. #define SAFE_DELETE(P) if(P) { [P release], P = nil; }
    118. #define SAFE_RELEASE(x) [x release];x=nil
    119. //----------------------内存----------------------------
    120. //----------------------图片----------------------------
    121. //读取本地图片
    122. #define LOADIMAGE(file,ext) [UIImage imageWithContentsOfFile:[[NSBundle mainBundle]pathForResource:file ofType:ext]]
    123. //定义UIImage对象
    124. #define IMAGE(A) [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:A ofType:nil]]
    125. //定义UIImage对象
    126. #define ImageNamed(_pointer) [UIImage imageNamed:[UIUtil imageName:_pointer]]
    127. //建议使用前两种宏定义,性能高于后者
    128. //----------------------图片----------------------------
    129. //----------------------颜色类---------------------------
    130. // rgb颜色转换(16进制->10进制)
    131. #define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
    132. //带有RGBA的颜色设置
    133. #define COLOR(R, G, B, A) [UIColor colorWithRed:R/255.0 green:G/255.0 blue:B/255.0 alpha:A]
    134. // 获取RGB颜色
    135. #define RGBA(r,g,b,a) [UIColor colorWithRed:r/255.0f green:g/255.0f blue:b/255.0f alpha:a]
    136. #define RGB(r,g,b) RGBA(r,g,b,1.0f)
    137. //背景色
    138. #define BACKGROUND_COLOR [UIColor colorWithRed:242.0/255.0 green:236.0/255.0 blue:231.0/255.0 alpha:1.0]
    139. //清除背景色
    140. #define CLEARCOLOR [UIColor clearColor]
    141. #pragma mark - color functions
    142. #define RGBCOLOR(r,g,b) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1]
    143. #define RGBACOLOR(r,g,b,a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)]
    144. //----------------------颜色类--------------------------
    145. //----------------------其他----------------------------
    146. //方正黑体简体字体定义
    147. #define FONT(F) [UIFont fontWithName:@"FZHTJW--GB1-0" size:F]
    148. //定义一个API
    149. #define APIURL                @"http://xxxxx/"
    150. //登陆API
    151. #define APILogin              [APIURL stringByAppendingString:@"Login"]
    152. //设置View的tag属性
    153. #define VIEWWITHTAG(_OBJECT, _TAG)    [_OBJECT viewWithTag : _TAG]
    154. //程序的本地化,引用国际化的文件
    155. #define MyLocal(x, ...) NSLocalizedString(x, nil)
    156. //G-C-D
    157. #define BACK(block) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block)
    158. #define MAIN(block) dispatch_async(dispatch_get_main_queue(),block)
    159. //NSUserDefaults 实例化
    160. #define USER_DEFAULT [NSUserDefaults standardUserDefaults]
    161. //由角度获取弧度 有弧度获取角度
    162. #define degreesToRadian(x) (M_PI * (x) / 180.0)
    163. #define radianToDegrees(radian) (radian*180.0)/(M_PI)
    164. //单例化一个类
    165. #define SYNTHESIZE_SINGLETON_FOR_CLASS(classname) \
    166. \
    167. static classname *shared##classname = nil; \
    168. \
    169. + (classname *)shared##classname \
    170. { \
    171. @synchronized(self) \
    172. { \
    173. if (shared##classname == nil) \
    174. { \
    175. shared##classname = [[self alloc] init]; \
    176. } \
    177. } \
    178. \
    179. return shared##classname; \
    180. } \
    181. \
    182. + (id)allocWithZone:(NSZone *)zone \
    183. { \
    184. @synchronized(self) \
    185. { \
    186. if (shared##classname == nil) \
    187. { \
    188. shared##classname = [super allocWithZone:zone]; \
    189. return shared##classname; \
    190. } \
    191. } \
    192. \
    193. return nil; \
    194. } \
    195. \
    196. - (id)copyWithZone:(NSZone *)zone \
    197. { \
    198. return self; \
    199. }
    200. #endif