iOS开发中常用发的宏定义


少年上人号怀素,草书天下称独步。墨池飞出北溟鱼,笔锋杀尽中山兔。
八月九月天气凉,酒徒词客满高堂。笺麻素绢排数厢,宣州石砚墨色光。
吾师醉后倚绳床,须臾扫尽数千张。飘风骤雨惊飒飒,落花飞雪何茫茫。
起来向壁不停手,一行数字大如斗。怳怳如闻神鬼惊,时时只见龙蛇走。
左盘右蹙如惊电,状同楚汉相攻战。湖南七郡凡几家,家家屏障书题遍。
王逸少,张伯英,古来几许浪得名。张颠老死不足数,我师此义不师古。
古来万事贵天生,何必要公孙大娘浑脱舞。

——李白 《草书歌行》

常用的宏定义文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// 判断字符串是否为空
#define kStringIsEmpty(str) ([str isKindOfClass:[NSNull class]] || str == nil || [str length] < 1 ? YES : NO )

// 判断数组是否为空
#define kArrayIsEmpty(array) (array == nil || [array isKindOfClass:[NSNull class]] || array.count == 0)

// 判断字典是否为空
#define kDictIsEmpty(dic) (dic == nil || [dic isKindOfClass:[NSNull class]] || dic.allKeys == 0)

// 判断对象是否为空
#define kObjectIsEmpty(_object) (_object == nil \ || [_object isKindOfClass:[NSNull class]] \ || ([_object respondsToSelector:@selector(length)] && [(NSData *)_object length] == 0) \ || ([_object respondsToSelector:@selector(count)] && [(NSArray *)_object count] == 0))

// 一些缩写
#define kApplication [UIApplication sharedApplication]
#define kKeyWindow [UIApplication sharedApplication].keyWindow
#define kAppDelegate [UIApplication sharedApplication].delegate
#define kUserDefaults [NSUserDefaults standardUserDefaults]
#define kNotificationCenter [NSNotificationCenter defaultCenter]

// App版本号及名称
#define kAppVersion [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]
#define kAppDisplayName [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"]

// 区分不同语言导入的头文件
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "XSConst.h"
#endif

// 区分不同环境接口
#ifdef DEBUG // 调试状态, 打开LOG功能
#define XSLog(...) NSLog(__VA_ARGS__)
#define XSKYDWAPIURL @"your_server_debug_url"
#define XSKYDWImageAPIURL @"your_server_debug_url"

#else // 发布状态, 关闭LOG功能
#define XSLog(...)
#define XSKYDWAPIURL @"your_server_release_url"
#define XSKYDWImageAPIURL @"your_server_release_url"
#endif

// 打印方法调用
#define XSLogFuc XSLog(@"%s", __func__);

// 颜色设置
#define XSColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1]
// 有透明度的颜色
#define XSColorA(r, g, b, a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:(a)/255.0]
// 灰色
#define XSGrayColor(value) XSColor(value, value, value)
// 全局灰色
#define XSCommonBgColor XSGrayColor(238)
// 标签的背景颜色
#define XSTagBgColor XSColor(70, 142, 243)
// 随机色
#define XSRandomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0]

// 屏幕的宽高
#define kSScreenW [UIScreen mainScreen].bounds.size.width
#define kSScreenH [UIScreen mainScreen].bounds.size.height

// 判断系统的版本
#define iOS7 ([[UIDevice currentDevice].systemVersion doubleValue] >= 7.0)
#define iOS8 ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0)
#define iOS9 ([[UIDevice currentDevice].systemVersion doubleValue] >= 9.0)

// 为了解析服务器返回的数据 写到pilst文件里面看更清晰
#define XSWriteToPlist(obj, filename) [obj writeToFile:[NSString stringWithFormat:@"/Users/user11-kydw/Desktop/%@.plist", filename] atomically:YES];

// 消除调用performSelector在ARC下的警告 (系统无法确定返回值类型)
#define SuppressPerformSelectorLeakWarning(Stuff) \
do { \
_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \
Stuff; \
_Pragma("clang diagnostic pop") \
} while (0)
要不要鼓励一下😘