在类C语言中,宏的存在一直具有争议性,支持者觉得宏可以大大提高效率,使代码更简洁,用起来得心应手;反对者则认为,宏使得变量失去了类型,并且难以调试,降低了代码的可读性。这里我不准备探讨宏本身的意义,只想说明,在使用Objective C开发iOS项目时,这10个实用的宏,可以大大地提高你的开发效率,并且不影响可读性。
Objective C的语法十分冗余,命名也是长不忍睹,虽然有自动补全,但是写起来还是很不方便,而宏定义就是为解决这些烦恼而生。如果你是宏定义一生黑,也可以用函数替换。
以下宏定义保存在一个文件YourMacro.h
中,并且在预编译头文件xx-Prefix.pch中#import,就可以在全局工程中使用了。
Device Info
判断设备类型:
1
2
| #define IsIPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IsIPhone (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
|
System Version
获取系统版本信息:
1
| #define SystemVersionLessThan(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
|
例如,判断iOS版本,是否低于iOS7:
1
2
3
| if (SystemVersionLessThan(@"7.0")) {
return;
}
|
UI
判断是否为高清屏:
1
| #define IsRetina ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] >= 2)
|
Color
1
2
3
4
5
| #define Color_RGB(r, g, b) [UIColor colorWithRed:r / 255.0 green:g / 255.0 blue:b / 255.0 alpha:1]
#define Color_RGBA(r, g, b, a) [UIColor colorWithRed:r / 255.0 green:g / 255.0 blue:b / 255.0 alpha:a]
//用法
view.backgroundColor = Color_RGB(0, 0, 0);
|
NSString
1
2
3
4
5
| #define NSStringFromInt(d) [NSString stringWithFormat:@"%d", (d)]
#define NSStringFromLong(d) [NSString stringWithFormat:@"%lld", (d)]
#define NSStringConcat(str1, str2) [NSString stringWithFormat:@"%@%@", (str1), (str2)]
#define NSStringFromNSData(data) [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]
#define NSDataFromNSString(str) [str dataUsingEncoding:NSUTF8StringEncoding]
|
Number
1
2
3
4
| //比较浮点数
#define FloatEqual(f1, f2) ( fabs( (f1) - (f2) ) < 0.0001 )
//使数值在上下限内
#define MID(x, y, z) ( y < x ? x : (z < y ? z : y) )
|
Notification
1
2
3
4
5
6
7
8
9
| /**
* 通知声明
*/
#define N_Dec(notification) extern NSString * const notification
/**
* 通知定义
*/
#define N_Def(notification) NSString * const notification = @#notification
|
Localization
1
2
3
| #define L(key) NSLocalizedString(key, nil)
//用法
label.text = L(@"Hello");
|
Debug & Log
NSLog默认会在Debug和Release版都打印,如果希望Release版本不打印Log:
1
2
3
4
5
| #ifdef DEBUG
#define MyLog( s, ... ) NSLog( @"<%@:%d> %@", [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )
#else
#define MyLog( s, ... )
#endif
|
App
1
2
3
4
5
| /**
* 是否内测版本
*/
#define IsInternalApp ([[NSBundle mainBundle].bundleIdentifier isEqualToString:@"com.inc.enterprise.proj"])
|
转载请注明:大众点赞 - 沉迷的大多数 » http://like.lessfun.com/blog/2014/09/18/10-useful-macros-in-objective-c-develop/