iOS常用宏定义
2017-09-19 本文已影响139人
李伯坤
摘自我的一个开源的底层库 TLKit:https://github.com/tbl00c/TLKit
屏幕尺寸
#define SCREEN_SIZE [UIScreen mainScreen].bounds.size
#define SCREEN_WIDTH SIZE_SCREEN.width
#define SCREEN_HEIGHT SIZE_SCREEN.height
常用控件高度
#define STATUSBAR_HEIGHT 20.0f
#define TABBAR_HEIGHT 49.0f
#define NAVBAR_HEIGHT 44.0f
#define SEARCHBAR_HEIGHT 44.0f
#define BORDER_WIDTH_1PX ([[UIScreen mainScreen] scale] > 0.0 ? 1.0 / [[UIScreen mainScreen] scale] : 1.0)
设备(屏幕)类型
#define SCRREN_IPHONE4 (SCREEN_HEIGHT >= 480.0f) // 320 * 480
#define SCRREN_IPHONE5 (SCREEN_HEIGHT >= 568.0f) // 320 * 568
#define SCRREN_IPHONE6 (SCREEN_HEIGHT >= 667.0f) // 375 * 667
#define SCRREN_IPHONE6P (SCREEN_HEIGHT >= 736.0f) // 414 * 736
颜色
#define RGBColor(r, g, b) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1.0]
#define RGBAColor(r, g, b, a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:a]
#define HexColor(color) [UIColor colorWithRed:((float)((color & 0xFF0000) >> 16))/255.0 green:((float)((color & 0xFF00) >> 8))/255.0 blue:((float)(color & 0xFF))/255.0 alpha:1.0]
#define HexAColor(color, a) [UIColor colorWithRed:((float)((color & 0xFF0000) >> 16))/255.0 green:((float)((color & 0xFF00) >> 8))/255.0 blue:((float)(color & 0xFF))/255.0 alpha:a]
常用系统方法简写
/// 广播中心
#define TLNotificationCenter [NSNotificationCenter defaultCenter]
/// 用户自定义数据
#define TLUserDefaults [NSUserDefaults standardUserDefaults]
/// URL
#define TLURL(urlString) [NSURL URLWithString:urlString]
/// 图片
#define TLImage(imageName) (imageName ? [UIImage imageNamed:imageName] : nil)
#define TLPNG(X) [[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:X ofType:@"png"]]
#define TLJPG(X) [[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:X ofType:@"jpg"]]
/// 字符串
#define TLNoNilString(str) (str.length > 0 ? str : @"")
/// 方法名
#define TLStirngFormSelector(s) [[NSString alloc] initWithUTF8String:sel_getName(s)]
/// 国际化
#define LOCSTR(str) NSLocalizedString(str, nil)
快捷方法
/// PushVC
#define PushVC(vc) {\
[vc setHidesBottomBarWhenPushed:YES];\
[self.navigationController pushViewController:vc animated:YES];\
}
/// 方法交换
#define TLExchangeMethod(oldSEL, newSEL) {\
Method oldMethod = class_getInstanceMethod(self, oldSEL);\
Method newMethod = class_getInstanceMethod(self, newSEL);\
method_exchangeImplementations(oldMethod, newMethod);\
}\
多线程
#define TLBackThread(block) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block)
#define TLMainThread(block) dispatch_async(dispatch_get_main_queue(), block)
#define TLMainBarrier(block) dispatch_barrier_async(dispatch_get_main_queue(), block)
#define TLMainAfter(x, block) dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(x * NSEC_PER_SEC)), dispatch_get_main_queue(), block);
循环引用消除
/**
* 使用方法:
* @weakify(self);
* [self.request requestWithCompleteAction:^{
* @strongify(self);
* [self.tableView reloadData];
* }];
*/
#ifndef weakify
#if DEBUG
#if __has_feature(objc_arc)
#define weakify(object) autoreleasepool{} __weak __typeof__(object) weak##_##object = object;
#else
#define weakify(object) autoreleasepool{} __block __typeof__(object) block##_##object = object;
#endif
#else
#if __has_feature(objc_arc)
#define weakify(object) try{} @finally{} {} __weak __typeof__(object) weak##_##object = object;
#else
#define weakify(object) try{} @finally{} {} __block __typeof__(object) block##_##object = object;
#endif
#endif
#endif
#ifndef strongify
#if DEBUG
#if __has_feature(objc_arc)
#define strongify(object) autoreleasepool{} __typeof__(object) object = weak##_##object;
#else
#define strongify(object) autoreleasepool{} __typeof__(object) object = block##_##object;
#endif
#else
#if __has_feature(objc_arc)
#define strongify(object) try{} @finally{} __typeof__(object) object = weak##_##object;
#else
#define strongify(object) try{} @finally{} __typeof__(object) object = block##_##object;
#endif
#endif
#endif
// 方式二
#define TLWeakSelf(type) __weak typeof(type) weak##type = type;
#define TLStrongSelf(type) __strong typeof(type) strong##type = type;
系统版本
#define SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
#define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)
其他
// XCode
#define XCODE_VERSION_8_LATER __has_include(<UserNotifications/UserNotifications.h>)