#pragma mark ----------------------------- 系統控件默認尺寸 #define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width) #define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height) #define NAV_WIDTH SCREEN_WIDTH #define NAV_HEIGHT (44) #define TAB_BAR_WIDTH SCREEN_WIDTH #define TAB_BAR_HEIGHT (48) #define STATUS_BAR_HEIGHT (20) #pragma mark - Thread functions #pragma mark GCD線程相關 //線程執行方法 GCD #define PERFORMSEL_BACK(block) dispatch_async(\ dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),\ block) #define PERFORMSEL_MAIN(block) dispatch_async(dispatch_get_main_queue(),\ block) #pragma mark - Singleton Creation functions #pragma mark 單例建立,統一單例命名調用方式 //單例聲明 .h中使用 #undef AS_SINGLETON #define AS_SINGLETON( __class ) \ + (__class *)sharedInstance; //單例實現建立 .m中使用 #undef DEF_SINGLETON #define DEF_SINGLETON( __class ) \ + (__class *)sharedInstance \ { \ static dispatch_once_t once; \ static __class * __singleton__; \ dispatch_once( &once, ^{ __singleton__ = [[__class alloc] init]; } ); \ return __singleton__; \ } #pragma mark - Nil or NULL #pragma mark 爲空判斷 //是否爲空或是[NSNull null] #define NotNilAndNull(_ref) (((_ref) != nil) && (![(_ref) isEqual:[NSNull null]])) #define IsNilOrNull(_ref) (((_ref) == nil) || ([(_ref) isEqual:[NSNull null]])) //字符串是否爲空 #define IsStrEmpty(_ref) (((_ref) == nil) || ([(_ref) isEqual:[NSNull null]]) ||([(_ref)isEqualToString:@""])) //數組是否爲空 #define IsArrEmpty(_ref) (((_ref) == nil) || ([(_ref) isEqual:[NSNull null]]) ||([(_ref) count] == 0)) //日誌打印 #ifdef DEBUGLOG # define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); #else # define DLog(...) #endif #pragma mark 系統判斷 #define IOS9_OR_LATER ( [[[UIDevice currentDevice] systemVersion] compare:@"9.0"] != NSOrderedAscending ) #define IOS8_OR_LATER ( [[[UIDevice currentDevice] systemVersion] compare:@"8.0"] != NSOrderedAscending ) #define IOS7_OR_LATER ( [[[UIDevice currentDevice] systemVersion] compare:@"7.0"] != NSOrderedAscending ) #define IOS6_OR_LATER ( [[[UIDevice currentDevice] systemVersion] compare:@"6.0"] != NSOrderedAscending ) #define IOS5_OR_LATER ( [[[UIDevice currentDevice] systemVersion] compare:@"5.0"] != NSOrderedAscending ) #define IOS4_OR_LATER ( [[[UIDevice currentDevice] systemVersion] compare:@"4.0"] != NSOrderedAscending ) #define IOS3_OR_LATER ( [[[UIDevice currentDevice] systemVersion] compare:@"3.0"] != NSOrderedAscending ) //檢查系統版本 #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) //機型判斷 #define IS_IPAD ((UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)) #define IS_IPADz ([(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) intValue]) #define IS_IPHONE_5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO) #define IS_IPHONE_6 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO) //iphone6_p 放大模式下的 currentMode反饋尺寸 (1125, 2001) #define IS_IPHONE_6p (([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) : NO)||([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2001), [[UIScreen mainScreen] currentMode].size) : NO)) //#define IS_IPHONE_4 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO) #define WIDTH_FIT ([[UIScreen mainScreen] bounds].size.width/320) #define HEIGHT_FIT (([[UIScreen mainScreen] bounds].size.height-64)/504) #define IS_IPHONE_4 ([UIScreen mainScreen].bounds.size.height == 480) //適配iphoneX #define kStatusBarHeight [UIApplication sharedApplication].statusBarFrame.size.height #define kNavBar ((iPhoneX || iPhoneMAXR) ? 88.0 : 64.0) #define kTabBar ((iPhoneX || iPhoneMAXR) ? 83.0 : 49.0) #define kStatusBar ((iPhoneX || iPhoneMAXR) ? 44.0 : 22.0) #define iPhoneX (UIScreen.mainScreen.bounds.size.width == 375 && UIScreen.mainScreen.bounds.size.height == 812.0 ? true : false) #define iPhoneMAXR (UIScreen.mainScreen.bounds.size.height == 812.0 || UIScreen.mainScreen.bounds.size.height == 896.0 ? true : false) //顏色建立 #undef RGBCOLOR #define RGBCOLOR(r,g,b) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1] #undef RGBACOLOR #define RGBACOLOR(r,g,b,a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a] #undef HEX_RGB #define HEX_RGB(V) [UIColor colorWithRGBHex:V] //HEX_RGB(V) 需加分類方法 SIP(APP)直接取色 + (UIColor *)colorWithRGBHex:(UInt32)hex { int r = (hex >> 16) & 0xFF; int g = (hex >> 8) & 0xFF; int b = (hex) & 0xFF; return [UIColor colorWithRed:r / 255.0f green:g / 255.0f blue:b / 255.0f alpha:1.0f]; }
參考文章:https://segmentfault.com/a/1190000003507630segmentfault