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

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

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

[cpp] view plaincopy

  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

MacroDefinition.h  下载地址:https://github.com/XFZLDXF/Macro

CSDN下载:http://download.csdn.net/detail/duxinfeng2010/5555367

转载于:https://my.oschina.net/hejunbinlan/blog/424589

iOS开发中那些高效常用的宏相关推荐

  1. iOS开发中对于一些常用的相对路径(持续更新)

    1.iOS开发的证书的描述文件放置地点  ~/Library/MobileDevice/Provisioning Profiles 2.$(SRCROOT)代表的是这个项目文件夹所在的位置  $(PR ...

  2. iOS开发中常用的方法

    iOS开发中常用的方法 系统弹窗: 过期方法: UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"确认报价" ...

  3. iOS开发中的Web应用概述

    为了更好的阅读体验,建议阅读原文 插播广告 -- 几十行代码完成资讯类App多种形式内容页 HybridPageKit :一个针对资讯类App高性能.易扩展.组件化的通用内容页实现框架. 想和我一起全 ...

  4. 如何深入理解 iOS 开发中的锁?

    摘要 本文的目的不是介绍 iOS 中各种锁如何使用,一方面笔者没有大量的实战经验,另一方面这样的文章相当多,比如 iOS中保证线程安全的几种方式与性能对比.iOS 常见知识点(三):Lock.本文也不 ...

  5. 理解:iOS开发中锁的实现原理

    摘要 本文的目的不是介绍 iOS 中各种锁如何使用,一方面笔者没有大量的实战经验,另一方面这样的文章相当多,比如 iOS中保证线程安全的几种方式与性能对比.iOS 常见知识点(三):Lock.本文也不 ...

  6. 深入理解 iOS 开发中的锁

    深入理解 iOS 开发中的锁 摘要 本文的目的不是介绍 iOS 中各种锁如何使用,一方面笔者没有大量的实战经验,另一方面这样的文章相当多,比如 iOS中保证线程安全的几种方式与性能对比.iOS 常见知 ...

  7. iOS开发中的锁实现猜测

    本文的目的不是介绍 iOS 中各种锁如何使用,一方面笔者没有大量的实战经验,另一方面这样的文章相当多,比如 iOS中保证线程安全的几种方式与性能对比.iOS 常见知识点(三):Lock.本文也不会详细 ...

  8. iOS开发中的神兵利器 [实战系列]-李发展-专题视频课程

    iOS开发中的神兵利器 [实战系列]-11758人已学习 课程介绍         - 140节课程讲解GitHub中近百个过千star的iOS热门开源项目 - 市面上唯一大规模讲解热门的iOS开源项 ...

  9. [贝聊科技]如何在iOS开发中更好的做假数据?

    当工期比较紧的时候,项目开发中会经常出现移动端等待后端接口数据的情形,不但耽误项目进度,更让人有种无奈的绝望.所以在开发中,我们常常自己做些假数据,以方便开发和UI调试.然而做假数据方法不同,效率和安 ...

  10. iOS 开发中的多线程

    线程.进程 什么是线程.进程   有的人说进程就像是人的脑袋,线程就是脑袋上的头发~~.其实这么比方不算错,但是更简单的来说,用迅雷下载文件,迅雷这个程序就是一个进程,下载的文件就是一个线程,同时下载 ...

最新文章

  1. 全文翻译(四) TVM An Automated End-to-End Optimizing Compiler
  2. 《Objective-c》Foundation框架 -(字符串:NSString和NSMutableString)
  3. 多层神经网络(BP算法)介绍
  4. CVE-2021-35211: SolarWinds Serv-U SSH 漏洞分析
  5. 中国新能源重卡行业十四五规划及投资可行性研究报告2022-2028年版
  6. std::setprecision、std::ios::fixed使用说明
  7. 羽毛球 机器人 Robocon 2015 泰国预选赛(全国大学生机器人竞赛)
  8. Linux笔记-iptables开放指定端口,开放ICMP协议,其他端口禁止访问
  9. linux php文件,Linux php文件安装目录在哪
  10. WinForm------TreeList修改节点图标和按钮样式
  11. 动态规划学习(35分钟视频课)
  12. CodeForces 828C String Reconstruction(并查集思想)
  13. 视频教程-Excel VBA网抓教程【你学得会】-Office/WPS
  14. 电路交换、报文交换和分组交换的区别
  15. js设计模式之单例模式
  16. 计算机插入的u盘文件打不开,为什么u盘文件夹打不开
  17. oracle+ebs+fsg报表,EBS 11i FSG报表用XML publish输出问题!!!!
  18. #51CTO学院四周年# 感谢51CTO学院让我走出迷茫
  19. opencv + face_recognition —— 人脸识别案例
  20. vim跳转到函数定义处

热门文章

  1. java并发包(JUC)
  2. 计算机组成原理--白中英版 全部知识点
  3. Fortran程序转换到c程序
  4. Navicat for MySQL_11.2.15破解版
  5. java unicode 藏文_藏文各个字母对应的unicode编码和十进制
  6. python抓取直播源 并更新_虎牙直播源Python爬虫
  7. 用matlab如何画六边形,matlab怎样直接画出六边形
  8. matlab生成点的坐标,根据点的发展坐标,将点的轨迹画出来
  9. C语言制作简单计算器
  10. 找了好久的数据库mysql中文乱码问题终于解决