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. flasCC技术点记录

    [待测试特性] 一.C接口导出相关 1.重载函数. 2.虚函数. 3.template相关 二.内存相关 1.as直接往c分配的内存写数据. 2.c直接往as对象写数据. 三.C访问AS 1.访问as ...

  2. Django开发博客- 页面美化

    css是一种用来描述某种标记语言写的web站点的样式语言.这里我们并不想展开讨论,关于CSS我在这里推荐一个很不错的资源: Codeacademy HTML & CSS course 不想从头 ...

  3. 《javascript高级程序设计》 第23章 离线应用与客户端存储

    23.1 离线检测23.2 应用缓存23.3 数据存储 23.3.1 Cookie 23.3.2 IE 用户数据 23.3.3 Web 存储机制 23.3.4 IndexedDB   23.1 离线检 ...

  4. C# EXCEL(.xls和.xlsx)导入到数据库

    C# EXCEL(.xls和.xlsx)导入到数据库  转(http://www.cnblogs.com/bart-cai/articles/2716555.html) 原理:1.判断是否是Excel ...

  5. Qt之QSS(QDarkStyleSheet)

    简述 关于样式,前面介绍了很多内容,下面分享一个深色样式表,很值得借鉴! 简述 效果 QSS 更多参考 效果 QSS /* * The MIT License (MIT) * * Copyright ...

  6. Jdk1.8+Eclipse+MySql+Tomcat开发Java应用的环境搭建

    Java学习开发的入门教程,方便大家在学习java开发过程中掌握最基本的环境搭建 有视频,有真相 http://www.chuanke.com/1340360-164338.html jdk是操作系统 ...

  7. C++格式化输入输出

    要实现格式化输入输出,程序需要包含 iostreams 标准标头 <iomanip> 以定义几个各自采用单个参数的操控器. 备注: 其中每个操控器都返回重载 basic_istream&l ...

  8. 使用 Fresco加载图片

    概念: ImagePipeline ——负责从网络.本地图片.Content Provider(内容提供者)或者本地资源那里获取图片,压缩保存在本地存储中和在内存中保存为压缩的图片 Drawee——处 ...

  9. easyui numberbox不可编辑

    今天又遇到了给easyui中numberbox设置不可编辑的功能,在(http://www.jeasyuicn.com/api/docTtml/index.htm)API中找到了一个方法:

  10. jquery.query.js 插件的用法

    转载自:http://www.cnblogs.com/dachie/archive/2010/09/16/1827840.html 代码如下: var url = location.search; & ...