大家都是知道使用宏不仅方便,而且可以提高开发效率。下面总结了iOS开发过程中的一些常用宏,会持续的往里面添加。
- //字符串是否为空
- #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 kScreenWidth \
- ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)] ? [UIScreenmainScreen].nativeBounds.size.width/[UIScreen mainScreen].nativeScale : [UIScreen mainScreen].bounds.size.width)
- #define kScreenHeight \
- ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)] ? [UIScreenmainScreen].nativeBounds.size.height/[UIScreen mainScreen].nativeScale : [UIScreen mainScreen].bounds.size.height)
- #define kScreenSize \
- ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)] ? CGSizeMake([UIScreenmainScreen].nativeBounds.size.width/[UIScreen mainScreen].nativeScale,[UIScreenmainScreen].nativeBounds.size.height/[UIScreen mainScreen].nativeScale) : [UIScreen mainScreen].bounds.size)
- //一些缩写
- #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 kSystemVersion [[UIDevice currentDevice] systemVersion]
- //获取当前语言
- #define kCurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0])
- //判断是否为iPhone
- #define kISiPhone (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
- //判断是否为iPad
- #define kISiPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
- //获取沙盒Document路径
- #define kDocumentPath [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]
- //获取沙盒temp路径
- #define kTempPath NSTemporaryDirectory()
- //获取沙盒Cache路径
- #define kCachePath [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]
- //判断是真机还是模拟器
- #if TARGET_OS_IPHONE
- //真机
- #endif
- #if TARGET_IPHONE_SIMULATOR
- //模拟器
- #endif
- //开发的时候打印,但是发布的时候不打印的NSLog
- #ifdef DEBUG
- #define NSLog(...) NSLog(@"%s 第%d行 \n %@\n\n",__func__,__LINE__,[NSString stringWithFormat:__VA_ARGS__])
- #else
- #define NSLog(...)
- #endif
- //颜色
- #define kRGBColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0]
- #define kRGBAColor(r, g, b, a) [UIColor colorWithRed:(r)/255.0 green:(r)/255.0 blue:(r)/255.0 alpha:a]
- #define kRandomColor KRGBColor(arc4random_uniform(256)/255.0,arc4random_uniform(256)/255.0,arc4random_uniform(256)/255.0)
- #define kColorWithHex(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]
- //弱引用/强引用
- #define kWeakSelf(type) __weak typeof(type) weak##type = type;
- #define kStrongSelf(type) __strong typeof(type) type = weak##type;
- //由角度转换弧度
- #define kDegreesToRadian(x) (M_PI * (x) / 180.0)
- //由弧度转换角度
- #define kRadianToDegrees(radian) (radian * 180.0) / (M_PI)
- //获取一段时间间隔
- #define kStartTime CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
- #define kEndTime NSLog(@"Time: %f", CFAbsoluteTimeGetCurrent() - start)