iOS常用宏定義總結 --Objective-C

iOS常用宏定義總結

iOS開發者都知道,我們在開發過程中會經常用到一些比較常用宏定義,比如手機屏幕寬高呀、系統版本等等的,會在項目中的好多位置用到。下面呢是本人在開發過程中用到的一些宏定義的總結,也有一些是從別人那裏學習過來的,希望幫助到想要統一使用宏定義的朋友。

代碼中可能會有一些錯誤或者異常以及不足之處,也希望大家多多評論補充或者直接聯繫我,在這裏先謝過了,小子會及時更新上去。

usage 使用

  1. 直接將下面拷貝到pch文件或者項目總頭文件中
  2. 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(扣扣)

宏定義文件github地址,下載即可直接使用

發佈了26 篇原創文章 · 獲贊 12 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章