- 不带参数
//获取底部安全区域高度(主要针对iPhoneX等设备)
//safeAreaInsets 该方法iOS 11之后新加入的接口
#define BottomSaveHeight [[[UIApplication sharedApplication] delegate] window].safeAreaInsets.bottom
- 带参数
// 弱引用自身 block中调用自身需要弱引用避免循环引用
#define Weakself(weakSelf) __weak typeof(&*self) weakSelf = self;
// LLVM老版编译器typeof(self)会报错,所以这样处理 typeof(&*self),现在不会了
#define Weakself(weakSelf) __weak typeof(self) weakSelf = self;
======================== 更新于2019年3月4日 ========================
// weak引用 ##的作用就是把2个宏参数连接为1个数
#define JJWeakSelfType(type) __weak typeof(type) weak##type = type;
例:
JJWeakSelfType(self)
[vc block:^(NSString * _Nullable string) {
weakself.string = string;
}];
/** strong引用 */
#define JJStrongSelfType(type) __strong typeof(type) strong##type = type;
==================================================================
- 函数式:通过一个函数做运算,返回运算结果
#define BottomSaveHeight [[[UIApplication sharedApplication] delegate] window].safeAreaInsets.bottom
// 底部定义一个50高度的view,
// 如果是iPhoneX的话底部安全区没有遮挡,可能显示不太友好,
// view高度加上安全区高度,遮挡住安全区
// safeAreaInsets 该方法iOS 11之后新加入的接口,所以要做判断处理
#define BottomViewHeight \
({CGFloat h = 50;\
if (@available(iOS 11.0, *)) {\
h = (BottomSaveHeight + 50);\
}\
(h);})
- block式:带block的参数
// SDWebImage中主线程安全调用的一个宏
#define dispatch_main_async_safe(block)\
if ([NSThread isMainThread]) {\
block();\
} else {\
dispatch_async(dispatch_get_main_queue(), block);\
}
宏定义可以优化开发效率,之后会不定期更新本文,来记录自己开发中经常用到的一些宏定义。
// 获取屏幕宽度
#define kScreenWidth [[UIScreen mainScreen] bounds].size.width
// 获取屏幕高度
#define kScreenHeight [[UIScreen mainScreen] bounds].size.height
// 获取状态栏高度,iPhoneX之前手机状态栏高度为20,iPhoneX为40,这个宏定义动态获取状态栏高度
#define kStatusBarHeight [[UIApplication sharedApplication] statusBarFrame].size.height
// Debug 模式调试打印数据
#ifdef DEBUG
#define LRString [NSString stringWithFormat:@"%s", __FILE__].lastPathComponent
#define LRLog(...) printf("%s 第%d行: %s\n\n", [LRString UTF8String] ,__LINE__, [[NSString stringWithFormat:__VA_ARGS__] UTF8String]);
#else
#define LRLog(...)
#endif
// 系统沙盒文件路径(NSString)
#define kDocumentPath [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]
// 系统沙盒文件路径(NSURL)
#define kDocumentURL [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]
// 系统缓存路径
#define kCachePath (NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0])
// 获取手机当前设置的地区
#define CURR_LANG ([[NSLocale preferredLanguages] objectAtIndex:0])
// 当前设备是iPad
#define INTERFACE_IS_PAD ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
// 当前设备是iPhone
#define INTERFACE_IS_PHONE ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
// 颜色(RGB)
#define RGBCOLOR(r, g, b) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1]
#define RGBACOLOR(r, g, b, a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)]
// RGB颜色转换(16进制->10进制)UIColor *color = UIColorFromRGB(0x9b9b9b);
#define UIColorFromRGB(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 UIColorWhite(white, alpha) [UIColor colorWithWhite:white alpha:alpha]
// 灰色度
#define UIColorWhite(w, a) [UIColor colorWithWhite:w alpha:a]