有奖调研 | 1TB硬盘等你拿 AI+区块链的发展趋势及应用调研
大家都是知道使用宏不仅方便,而且可以提高开发效率。下面总结了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)
【编辑推荐】
【责任编辑:枯木 TEL:(010)68476606】
点赞 0
- 大家都在看
- 猜你喜欢
编辑推荐
- 24H热文
- 一周话题
- 本月最赞
- Android开发中Handler的经典总结无需Root也能使用Xposed!开发移动应用程序的三种选择:原生、HTML5或混合我为什么劝你不要过度纠结于技术细节?人人都是开发者:5款傻瓜式APP开发工具七种技巧帮助您设计出优质的UI满足用户体验需求iPhone用户打车比Android用户贵,真的是因为苹果收了手续费吗?从零开始23天完成一款Android游戏开发(一)
- Android开发中Handler的经典总结开发移动应用程序的三种选择:原生、HTML5或混合无需Root也能使用Xposed!App工程结构搭建:几种常见Android代码架构分析人人都是开发者:5款傻瓜式APP开发工具iPhone用户打车比Android用户贵,真的是因为苹果收了手续费吗?从零开始23天完成一款Android游戏开发(一)21个免费的UI界面设计工具、资源及网站
- Android开发中Handler的经典总结开发移动应用程序的三种选择:原生、HTML5或混合无需Root也能使用Xposed!2017年9月编程语言排行榜:Java、C与C++三巨头还能统治排行榜多久?App工程结构搭建:几种常见Android代码架构分析从零开始23天完成一款Android游戏开发(一)人人都是开发者:5款傻瓜式APP开发工具iPhone用户打车比Android用户贵,真的是因为苹果收了手续费吗?
视频课程+更多
-
【王佩丰】PowerPoint2010视频教程
讲师:王佩丰747358人学习过
-
构建大型企业网络-(华为版)视频课程
讲师:吴忠捷26339人学习过
-
Windows Server 2008 活动目录视频课程
讲师:韩立刚353114人学习过
最新专题+更多
- 精选博文
- 论坛热帖
- 下载排行
读 书 +更多
网管员必读——网络组建(第2版)
《网管员必读——网络组建(第2版)》仍是以一个中等规模的模拟局域网组建为思路,较全面地介绍了与局域网组建相关的各方面知识和组建、配...
-
订阅51CTO邮刊
点击这里查看样刊