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

高效的iOS宏定义的更多相关文章

  1. ios宏定义字符串

    ios宏定义字符串 #define objcString(str) @""#str"" 使用效果: objcString(字符串)

  2. ios 宏定义 系统版本 判定

    当需要判断iOS系统版本的时候,相信很多人都会这么干: #define SystemVersion [[UIDevice currentDevice] systemVersion].floatValu ...

  3. iOS宏定义

    1.__OBJC__宏定义作用 在.pch 文件中一般都会自动加上这句宏定义,表示宏内引用的文件确保只被使用Objective-C语言的文件所引用,保证引用关系的清晰.因为在一个OC工程中,可能包含. ...

  4. ios宏定义学习

    宏简介: 宏是一种批量处理的称谓.一般说来,宏是一种规则或模式,或称语法替换 ,用于说明某一特定输入(通常是字符串)如何根据预定义的规则转换成对应的输出(通常也是字符串).这种替换在预编译时进行,称作 ...

  5. ios宏定义应该呆在恰当的地方

    项目为了看起来整洁 并减少不必要的多次拼写 我们会把这样的方法 做成宏定义 那么问题来了 很多文件同时用到一个或多个宏定义 写完之后就会变成这个样子 看起来很乱 阅读性也不好 那么问题来了怎么解决嘞 ...

  6. iOS宏定义的使用与规范

    宏定义在很多方面都会使用,例如定义高度.判断iOS系统.工具类,还有诸如文件路径.服务端api接口文档.为了对宏能够快速定位和了解其功能,我们最好在定义的时候将其放入特定的头文件中 定义尺寸类的宏 D ...

  7. 转 iOS宏定义的使用与规范

    宏定义在很多方面都会使用,例如定义高度.判断iOS系统.工具类,还有诸如文件路径.服务端api接口文档.为了对宏能够快速定位和了解其功能,我们最好在定义的时候将其放入特定的头文件中,下面我抛砖引玉,对 ...

  8. IOS 宏定义一个单例

    有时候是不是因为频繁地创建一个单例对象而头疼,一种方式要写好多遍?当然你可以用OC语言进行封装.但下面将介绍一种由C语言进行的封装.只要实现下面的方法,以后建单例对象只要二句话. 1.新建一个.h文件 ...

  9. iOS 宏定义_16进制色值转化为RGB返回UIColor类型对象

    // 十六进制颜色 #define COLOR_WITH_HEX(hexValue) [UIColor colorWithRed:((float)((hexValue & 0xFF0000) ...

随机推荐

  1. 《C#开发微信门户及应用》

    C#开发微信门户及应用(40)--使用微信JSAPI实现微信支付功能 C#开发微信门户及应用(39)--使用微信JSSDK实现签到的功能 C#开发微信门户及应用(38)--微信摇一摇红包功能 C#开发 ...

  2. 关于ASP.NET与CLR相互关系的一些总结

    原文地址:http://www.cnblogs.com/jasenkin/archive/2010/10/20/asp-net-clr-relation.html CLR(COM服务器) CLR作为一 ...

  3. js 返回上一页和刷新

    1. Javascript 返回上一页history.go(-1), 返回两个页面: history.go(-2); 2. history.back(). 3. window.history.forw ...

  4. cssText

    cssText 的本质就是设置 HTML 元素的 style 属性值 cssText 的方便之处在于一次可以写很多属性,而且变更 CSS 样式不必变 JS 代码,只需变样式字符串.但它有个缺点,就是它 ...

  5. [saiku] 使用 Apache Phoenix and HBase 结合 saiku 做大数据查询分析

    saiku不仅可以对传统的RDBMS里面的数据做OLAP分析,还可以对Nosql数据库如Hbase做统计分析. 本文简单介绍下一个使用saiku去查询分析hbase数据的例子. 1.phoenix和h ...

  6. template模版与Underscore.js

    template模版与Underscore.js 在项目中经常使用的模版是Underscore这个js框架的实用功能. 在html里面设定模板,然后js绑定数据,这样能避免在js中出现非常多的html ...

  7. uva 1639--精度处理方法之取对数(uva 1639)

    1639 - Candy Time limit: 3.000 seconds 1639 CandyLazyChild is a lazy child who likes candy very much ...

  8. css+div如何解决文字溢出

    看到标题你一定很轻易就会想到截断文字加“...”的做法.哈哈,就是这样.其实写这篇日志也只是把这样方法做个记录,因为似乎还有很多人不记得碰到这样的情况该如何处理. 首先,先解释一下,一般用div+cs ...

  9. 实验一 Java开发环境的熟悉境的熟悉

    - 运行结果: (一)命令行下Java程序开发 (二)Eclipse下Java程序开发.调试 设置断点和单步运行 单步运行:Step Into(快捷捷F5)和Step Over(快捷捷F5) 使程序直 ...

  10. QQ输入法评价

    用户界面: 用户可以通过登录QQ展现自己的QQ头像,可以点击头像显示用户信息,可以中英文切换,全半角切换,打开属性设置,以为软键盘 记住用户选择: 当用户使用QQ输入法时,QQ输入法可以记住用户当前的 ...