iOS常用宏定義總結
iOS開發者都知道,我們在開發過程中會經常用到一些比較常用宏定義,比如手機屏幕寬高呀、系統版本等等的,會在項目中的好多位置用到。下面呢是本人在開發過程中用到的一些宏定義的總結,也有一些是從別人那裏學習過來的,希望幫助到想要統一使用宏定義的朋友。
代碼中可能會有一些錯誤或者異常以及不足之處,也希望大家多多評論補充或者直接聯繫我,在這裏先謝過了,小子會及時更新上去。
usage 使用
- 直接將下面拷貝到pch文件或者項目總頭文件中
- 到github下載文件,直接拖到項目中使用。
代碼如下
/**
* iOS常用宏定義小總結
*****************************************************************
***|
***| 1. 重寫DEBUG模式下的NSLog
***| 2. APP屏幕大小相關
***| 3. GCD -- 多線程 dispatch
***| 4. catch緩存文件夾和Documents文件夾
***| 5. 圖片 UIImage
***| 6. App Version / Info Plist 系統版本比較等
***| 7. rgb顏色轉換 UIColor
***| 8. 字體 UIFont 只列舉一種,其他的換名稱自己可定義
***| 9. 角度轉弧度 弧度轉角度
***| 10. 單例 singleton
***| 11. iOS系統內部常用宏定義
***
******************************************************************
*/
#ifdef __OBJC__ //保證 #ifdef 中的宏定義只會在 OC 的代碼中被調用, 否則,一旦引入 C/C++ 的代碼或者框架,就會出錯
///////////////////////////////////////////////////////////////////////////////////////////////////
// //
// 1. NSLog 重寫NSLog,Debug模式下打印日誌和當前行數 release模式下不打印
// //
///////////////////////////////////////////////////////////////////////////////////////////////////
#ifdef DEBUG
#define NSLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
#define NSLog(...)
#endif
///////////////////////////////////////////////////////////////////////////////////////////////////
// //
// 2. App 屏幕相關 Frame Bounds
// //
///////////////////////////////////////////////////////////////////////////////////////////////////
//NavBar高度
#ifndef kNavigationBar_HEIGHT
#define kNavigationBar_HEIGHT 44
#endif
//獲取屏幕 寬度、高度
#ifndef kScreenHeight
#define kScreenHeight [[UIScreen mainScreen] bounds].size.height
#endif
#ifndef kScreenWidth
#define kScreenWidth [[UIScreen mainScreen] bounds].size.width
#endif
//不同屏幕尺寸字體適配(375,667是因爲目前蘋果開發一般用IPHONE6做中間層 如果不是則根據實際情況修改)
#ifndef kScreenWidthRatio
#define kScreenWidthRatio (kScreenWidth / 375.0)
#endif
#ifndef kScreenHeightRatio
#define kScreenHeightRatio (kScreenHeight / 667.0)
#endif
//根據傳入的值算出乘以比例之後的值
#define AdaptedWidth(x) ceilf((x) * kScreenWidthRatio)
#define AdaptedHeight(x) ceilf((x) * kScreenHeightRatio)
#ifndef MAIN_BOUNDS
#define MAIN_BOUNDS [[UIScreen mainScreen] bounds]
#endif
//判斷是那種設備
/*
4 4s
*/
#ifndef IPHONE4
#define IPHONE4 ([[UIScreen mainScreen] bounds].size.height==480)
#endif
/*
5 5s
*/
#ifndef IPHONE5S
#define IPHONE5S ([[UIScreen mainScreen] bounds].size.height==568)
#endif
/*
6 6s 7
*/
#ifndef IPHONE6
#define IPHONE6 ([[UIScreen mainScreen] bounds].size.height==667)
#endif
/*
6plus 6splus 7plus
*/
#ifndef IPHONE6P
#define IPHONE6P ([[UIScreen mainScreen] bounds].size.height==736)
#endif
// 是否iPad
#ifndef isPad
#define isPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#endif
///////////////////////////////////////////////////////////////////////////////////////////////////
// //
// 3. GCD -- 多線程 dispatch
// //
///////////////////////////////////////////////////////////////////////////////////////////////////
#define XH_GCD_MAIN(__BLOCK__) dispatch_async(dispatch_get_main_queue(), __BLOCK__)
#define XH_GCD_ASYNC(__BLOCK__) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), __BLOCK__)
#define XH_OPERATION_MAIN(__BLOCK__) [[NSOperationQueue mainQueue] addOperationWithBlock:__BLOCK__]
///////////////////////////////////////////////////////////////////////////////////////////////////
// //
// 4. catch緩存文件夾和Documents文件夾
// //
///////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef XH_USER_DEFAULT
#define XH_USER_DEFAULT [NSUserDefaults standardUserDefaults]
#endif
#ifndef XH_CACHE_DIR
#define XH_CACHE_DIR [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]
#endif
#ifndef XH_DOCUMENTS_DIR
#define XH_DOCUMENTS_DIR [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]
#endif
///////////////////////////////////////////////////////////////////////////////////////////////////
// //
// 5. App Version / Info Plist //
// //
///////////////////////////////////////////////////////////////////////////////////////////////////
//設備(手機)版本號
#ifndef IOS_VERSION_S
#define IOS_VERSION_S ([[UIDevice currentDevice] systemVersion]) //str
#endif
//設備(手機)版本號
#ifndef IOS_VERSION_F
#define IOS_VERSION_F ([[[UIDevice currentDevice] systemVersion] floatValue]) //float
#endif
//系統類型 eg: iOS10.0.1
#ifndef XH_OSTYPE
#define XH_OSTYPE [NSString stringWithFormat:@"iOS%@", [[UIDevice currentDevice] systemVersion]]
#endif
//app 版本號
#ifndef XH_BUNDLE_SHORT_VERSION_STRING
#define XH_BUNDLE_SHORT_VERSION_STRING [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]
#endif
//build版本號
#ifndef XH_BUNDLE_VERSION_STRING
#define XH_BUNDLE_VERSION_STRING [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]
#endif
//app 版本號 + build版本號
#ifndef XH_APP_VERSION_STRING
#define XH_APP_VERSION_STRING [NSString stringWithFormat:@"%@ (%@)", XH_BUNDLE_SHORT_VERSION_STRING, XH_BUNDLE_VERSION_STRING]
#endif
//bundleID
#ifndef XH_BUNDLE_IDENTIFIER
#define XH_BUNDLE_IDENTIFIER (NSString *)([[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleIdentifier"])
#endif
//設備名
#ifndef XH_DEVICE_MACHINE_NAME
#define XH_DEVICE_MACHINE_NAME (NSString *)(NSStringMachineNameFromCurrentDevice())
#endif
#ifndef XH_SCREEN_SCALE
#define XH_SCREEN_SCALE ([[UIScreen mainScreen] respondsToSelector:NSSelectorFromString(@"scale")] ? [[UIScreen mainScreen] scale] : 1.f)
#endif
#ifndef XH_DEBUG_APP_CONFIG_STRING
#define XH_DEBUG_APP_CONFIG_STRING [NSString stringWithFormat:@"App Version: '%@' System Version: '%@' Machine Name '%@' Bundle Identifier: '%@'", XH_APP_VERSION_STRING, XH_DEVICE_SYSTEM_VERSION, XH_DEVICE_MACHINE_NAME, XH_BUNDLE_IDENTIFIER]
#endif
//檢查系統版本
//相同版本
#define SYSTEM_VERSION_EQUAL_TO(__VERSION__) ([[[UIDevice currentDevice] systemVersion] compare:__VERSION__ options:NSNumericSearch] == NSOrderedSame)
//大於該系統版本
#define SYSTEM_VERSION_GREATER_THAN(__VERSION__) ([[[UIDevice currentDevice] systemVersion] compare:__VERSION__ options:NSNumericSearch] == NSOrderedDescending)
//大於等於系統該版本
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(__VERSION__) ([[[UIDevice currentDevice] systemVersion] compare:__VERSION__ options:NSNumericSearch] != NSOrderedAscending)
//小於該系統版本
#define SYSTEM_VERSION_LESS_THAN(__VERSION__) ([[[UIDevice currentDevice] systemVersion] compare:__VERSION__ options:NSNumericSearch] == NSOrderedAscending)
//小於等於系統該版本
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(__VERSION__) ([[[UIDevice currentDevice] systemVersion] compare:__VERSION__ options:NSNumericSearch] != NSOrderedDescending)
///////////////////////////////////////////////////////////////////////////////////////////////////
// //
// 6. 圖片 UIImage //
// //
///////////////////////////////////////////////////////////////////////////////////////////////////
//讀取本地圖片 (文件名,後綴名)
#define XH_LOADIMAGE(__FILENAME__,__EXTENSION__) [UIImage imageWithContentsOfFile:[[NSBundle mainBundle]pathForResource:__FILENAME__ ofType:__EXTENSION__]]
//定義UIImage對象 (文件名)
#define XH_IMAGE(__IMGNAME__) [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:__IMGNAME__ ofType:nil]]
///////////////////////////////////////////////////////////////////////////////////////////////////
// //
// 7. rgb顏色轉換 UIColor //
// //
///////////////////////////////////////////////////////////////////////////////////////////////////
// rgb顏色轉換(16進制->10進制)
#define XH_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]
//透明背景色
#ifndef XH_CLEARCOLOR
#define XH_CLEARCOLOR [UIColor clearColor]
#endif
#define XH_RGBACOLOR(r,g,b,a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)]
#define XH_RGBCOLOR(r,g,b) RGBACOLOR(r,g,b,1.0)
///////////////////////////////////////////////////////////////////////////////////////////////////
// //
// 8. 字體 UIFont //
// //
///////////////////////////////////////////////////////////////////////////////////////////////////
//方正黑體簡體字體定義
#define XH_FONT(__SIZE__) [UIFont fontWithName:@"FZHTJW--GB1-0" size:__SIZE__]
///////////////////////////////////////////////////////////////////////////////////////////////////
// //
// 9. 角度轉弧度 弧度轉角度 //
// //
///////////////////////////////////////////////////////////////////////////////////////////////////
#define XH_ANGLE_TO_RADIAN(__ANGLE__) (M_PI * (__ANGLE__) / 180.0)
#define XH_RADIAN_TO_ANGLE(__RADIAN__) (__RADIAN__ * 180.0) / (M_PI)
///////////////////////////////////////////////////////////////////////////////////////////////////
// //
// 10. 單例 singleton //
// //
///////////////////////////////////////////////////////////////////////////////////////////////////
// .h文件
#define singleton_interface(class) + (instancetype)shared##class;
// .m文件
#define singleton_implementation(class) \
static class *_instance; \
\
+ (id)allocWithZone:(struct _NSZone *)zone \
{ \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instance = [super allocWithZone:zone]; \
}); \
\
return _instance; \
} \
\
+ (instancetype)shared##class \
{ \
if (_instance == nil) { \
_instance = [[class alloc] init]; \
} \
\
return _instance; \
}
///////////////////////////////////////////////////////////////////////////////////////////////////
// //
// 11. 其他系統常用宏定義 //
// //
///////////////////////////////////////////////////////////////////////////////////////////////////
//判斷是真機還是模擬器
#if TARGET_OS_IPHONE
//iPhone Device code
#endif
#if TARGET_IPHONE_SIMULATOR
//iPhone Simulator code
#endif
#endif
email:1286090267@qq.com(扣扣)