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. 自定义ExpressionBuilder

    ExpressionBuilder的常见说明见https://msdn.microsoft.com/zh-cn/library/System.Web.Compilation.ExpressionBui ...

  2. mialx配置qq邮箱发送邮件

    #send mail use mailx(v12.0.4)#edit configure file set smtp-use-starttlsset from=xxxxxxxxx@qq.comset ...

  3. python 练习 23

    python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务.其基本形式为: while 判断条件: 执行语句…… 执行语句可以是单个语句或语句 ...

  4. [HBuilder] 简介

    官网首页: http://www.dcloud.io/runtime.html 特点: 编码比其他工具快5倍 代码输入法:按下数字快速选择候选项 可编程代码块:一个代码块,少敲50个按键 内置emme ...

  5. OC 类别(分类)Categroy

    Categroy类别,又称为扩展类,在类的原基础上扩展方法,且不可添加变量,如果扩展的方法与原始类中的方法相同,则会隐藏原始方法,且不可在扩展方法中通过super调用原始方法,这里与继承不同. 定义: ...

  6. C++文件读写练习

    编写一个程序,统计data.txt文件的行数,并将所有行前加上行号后写到data1.txt文件中. 算法提示: 行与行之间以回车符分隔,而getline()函数以回车符作为终止符.因此,可以采用get ...

  7. 课堂练习&课下作业

    设计思路: 列举出买十本的所有情况:1.一本的时候不打折扣 2.两本的时候买两本价最低 3.三本的时候买三本价最低 4.四本的时候买四本价最低 5.五本的时候买五本价最低 6.六本的时候分一本和五本价 ...

  8. 在Oracle中使用rank()over()排名的问题

    排序: ---rank()over(order by 列名 排序)的结果是不连续的,如果有4个人,其中有3个是并列第1名,那么最后的排序结果结果如:1 1 1 4 select scoreid, st ...

  9. BZOJ3689 异或之

    我们需要知道一个事实,trie树上是可以要求第k大的! 我们每个节点记个size值然后像其他数据结构一样维护就可以了 然后我们再搞个priority_queue什么的就好了,注意每个值会出现两次只要记 ...

  10. Sharepoint2010突然之间不能打开页面,报503错误The service is unavailable

    原因:安装Sahrepoint时的账号出现故障,可能是密码过期等等. 解决方案: 新建windows用户ada,密码设置为永不过期,隶属于:administrators/IIS-WPG/WSS-WPG ...