高效的iOS宏定义

时间:2023-03-09 20:12:50
高效的iOS宏定义

iOS开发过程中使用一些常用的宏可以提高开发效率,提高代码的重用性;将这些宏放到一个头文件里然后再放到工程中的-Prefix.pch文件中(或者直接放到-Prefix.pch中)直接可以使用,灰常方便。

本文整理自http://www.cocoachina.com/applenews/devnews/2013/0328/5907.html 。

做了一些分类和注释,可以根据自己习惯再添加或者删除或者修改这些宏进行使用。

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