iOS开发常用宏
2023-03-31 11:10:02 时间
大家都是知道使用宏不仅方便,而且可以提高开发效率。下面总结了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行 %@ ",__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)
相关文章
- 李飞飞划重点的「具身智能」,走到哪一步了?
- 在软件缺陷预测中使用软件可视化和迁移学习
- 中国SaaS的破茧与进击
- CFileDialog的使用方法简单介绍
- 手把手教你做一个华为鸿蒙系统Demo级项目(JS角度)
- 我为什么支持 BAT 拆掉「AI 研究院」
- 十分钟快速实战Three.js
- HUDI preCombinedField 总结(二)-源码分析
- dotnet 在析构函数调用 ThreadLocal 也许会抛出对方已释放
- Vscode个性化设置:让一个小萌妹陪你敲代码
- 裁员真能拯救中国互联网?
- dotnet C# 获取当前设备可移动磁盘
- 淘宝iOS扫一扫架构升级 - 设计模式的应用
- dotnet OpenXML 聊聊文本段落对齐方式
- 应用层与内核的几种通信方式
- 深度报告:大模型驱动 AI 全面提速!黄金十年开启
- python from…import的导入注意
- 揭秘6G时代网络架构!六大设计理念,三体四层五面一文看懂
- 一位老工程师在Google工作的十年:宁愿把团队交给别人带
- 思科宣布全面退出俄罗斯市场!