Objective:
In the work, many small partners will be in the PCH file definition some common macros, but also afraid to write these simple macro waste of time, and sometimes forget how to define what to do? I am also in the work of the same. So here to share some common macro definitions, like the small partners can be used directly in the project (continuous update)!
For the convenience of everyone, please click on GitHub-Macro definition header file download!
- 1. Get screen width and height
#define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width#define SCREENH_HEIGHT [UIScreen mainScreen].bounds.size.height
- According to a netizen (out of the language) reminder, if support horizontal screen can use the following macro:
#If __iphone_os_version_max_allowed >= 80000//current Xcode support iOS8 and above#define screen_width ([[UIScreen mainscreen] Respondstoselector: @selector (nativebounds)]?[ UIScreen mainscreen].nativebounds.size.width/[uiscreen Mainscreen].nativescale:[uiscreen MainScreen]. Bounds.size.width)#define screenh_height ([[UIScreen mainscreen] Respondstoselector: @selector (nativebounds)]?[ UIScreen mainscreen].nativebounds.size.height/[uiscreen Mainscreen].nativescale:[uiscreen MainScreen]. Bounds.size.height)#define screen_size ([[UIScreen mainscreen] Respondstoselector: @selector (nativebounds)]? Cgsizemake ([UIScreen mainscreen].nativebounds.size.width/[uiscreen mainscreen].nativescale,[uiscreen MainScreen]. Nativebounds.size.height/[uiscreen mainscreen].nativescale): [UIScreen mainscreen].bounds.size)#Else #define screen_width [UIScreen mainscreen].bounds.size.width#define screenh_height [UIScreen mainscreen].bounds.size.height#define screen_size [UIScreen mainscreen].bounds.size#endif
#define LRNotificationCenter [NSNotificationCenter defaultCenter]
#define LRRandomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0]
- 4. Set RGB color/Set RGBA color
#define LRRGBColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0]#define LRRGBAColor(r, g, b, a) [UIColor colorWithRed:(r)/255.0 green:(r)/255.0 blue:(r)/255.0 alpha:a]// clear背景颜色#define LRClearColor [UIColor clearColor]
- 5. Custom high-efficiency NSLog
- In the development of the project, we will add log in many places, but do not want to use the log when the release, we can not delete one, so the custom log is inevitable!
#ifdef DEBUG#define LRLog(...) NSLog(@"%s 第%d行 \n %@\n\n",__func__,__LINE__,[NSString stringWithFormat:__VA_ARGS__])#else#define LRLog(...)#endif
- 6. Weak references/strong references
#define LRWeakSelf(type) __weak typeof(type) weak##type =type;#define LRStrongSelf(type) __strong typeof(type) type = weak##type;
- 7. Set the view fillet and border
#define LRViewBorderRadius(View, Radius, Width, Color)\setsetsetsetBorderColor:[Color CGColor]]
- 8. Convert radians from angle to radians
#define LRDegreesToRadian(x) (M_PI * (x) / 180.0)#define LRRadianToDegrees(radian) (radian*180.0)/(M_PI)
- 9. Set the Load Prompt box (third-party framework: Toast)
- This macro definition is very useful, but small partners need cocoapods to import a third-party framework: Toast
Here's how to use it:
lrtoast (@ "Network load failed"); define Lrtoast (str) Cstoaststyle *style = [ [ cstoaststyle alloc" initwithdefaultstyle ]; [ kwindow maketoast:str duration:0.6 Position: Cstoastpositioncenter style:style ; kwindow.userinteractionenabled = NO; Dispatch_after (Dispatch_time (Dispatch_time_now, (int64_t) (0.6 * nsec_per_sec)), Dispatch_get_main_queue (), ^{ kwindow.userinteractionenabled = YES; } ); \
- 10. Set the Load Prompt box (third-party framework: MBPROGRESSHUD)
This macro definition is similar to the previous one, such as:
//Load#define kshownetworkactivityindicator () [UIApplication sharedapplication]. networkactivityindicatorvisible = YES//Close load#define hidenetworkactivityindicator () [UIApplication sharedapplication]. networkactivityindicatorvisible = NO//Set load#Define networkactivityindicatorvisible (x) [UIApplication sharedapplication]. networkactivityindicatorvisible = x#define Kwindow [uiapplication Sharedapplication].keywindow#define Kbackview for (UIView *item in kwindow.subviews) {\if(Item.tag = =10000) {[item Removefromsuperview]; UIView * Aview = [[UIView alloc] init]; Aview.frame = [UIScreen mainscreen].bounds; Aview.tag =10000; Aview.backgroundcolor = [[Uicolor blackcolor] Colorwithalphacomponent:0.3]; [Kwindow Addsubview:aview]; } }#define kshowhudandactivity Kbackview; [Mbprogresshud Showhudaddedto:kwindow animated:yes];kshownetworkactivityindicator ()#define khiddenhud [Mbprogresshud hideallhudsforview:kwindow Animated:yes]#define Kremovebackview for (UIView *item in kwindow.subviews) {\if(Item.tag = =10000) {[UIView animatewithduration:0.4animations:^{Item.alpha =0.0; } completion:^ (BOOL finished) {[item removefromsuperview];}]; } }#define khiddenhudandavtivity Kremovebackview;khiddenhud; Hidenetworkactivityindicator ()
- 11. Get the frame/picture resource for view
//获取view的frame(不建议使用)//#define kGetViewWidth(view) view.frame.size.width//#define kGetViewHeight(view) view.frame.size.height//#define kGetViewX(view) view.frame.origin.x//#define kGetViewY(view) view.frame.origin.y//获取图片资源#define kGetImage(imageName) [UIImage imageNamed:[NSString stringWithFormat:@"%@",imageName]]
- 12. Get the current language
#defineLRCurrentLanguage ([[NSLocale preferredLanguages]objectAtIndex:0])
#if __has_feature(objc_arc)// ARC#else// MRC#endif
- 14. Determine the current iphone device/system version
//Determine if the iphone#define Is_iphone (ui_user_interface_idiom () = = Uiuserinterfaceidiomphone)//Determine if the ipad#define Is_ipad (ui_user_interface_idiom () = = Uiuserinterfaceidiompad)//Determine if it is an ipod#define is_ipod ([[[[[Uidevice Currentdevice] model] isequaltostring:@ "IPOD Touch"])//Determine if the IPhone 5SE#define iphone5se [[UIScreen mainscreen] Bounds].size.width = = 320.0f && [[UIScreen Mainscreen] Bounds].size.height = = 568.0f//Determine if the iphone 6/6s#define iphone6_6s [[UIScreen mainscreen] Bounds].size.width = = 375.0f && [[UIScreen Mainscreen] Bounds].size.height = = 667.0f//Determine if the iphone 6plus/6splus#define iphone6plus_6splus [[UIScreen mainscreen] Bounds].size.width = = 414.0f && [[UIScreen Mainscreen] Bounds].size.height = = 736.0f//Get System version#define ios_system_version [[[Uidevice Currentdevice] systemversion] Floatvalue]//To determine the system version of IOS 8 or higher#define ios_version_8_or_later ([[[[[Uidevice Currentdevice] systemversion] floatvalue] >=8.0)? (YES):(NO))
- 15. Judging whether it is a real machine or a simulator
#if TARGET_OS_IPHONE //iPhone Device #endif #if TARGET_IPHONE_SIMULATOR //iPhone Simulator #endif
//获取temp#define kPathTemp NSTemporaryDirectory()//获取沙盒 Document#define kPathDocument [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]//获取沙盒 Cache#define kPathCache [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]
- Macro definition for 17.GCD
Many small partners are very annoying to write gcd method, so this definition for macro use more convenient and concise! Such as:
//GCD-one-time execution #define Span class= "Hljs-function" >kdispatch_once_block (onceblock) static Dispatch _once_t Oncetoken; dispatch_once (&oncetoken, Onceblock) ; //GCD-run on main thread #define kdispatch_main_thread (mainqueueblock) dispatch_async (dispatch_get_main_queue () , Mainqueueblock) ; //gcd-Open Async thread #define kdispatch_global_queue_default (globalqueueblock) dispatch_async (dispatch_get_global_queue (DISPATCH_ Queue_priority_default, 0 ) , GLOBALQUEUEBLOCL) ;
Use of macros and const:
- Many small partners define a constant string, which is defined as a macro, the most typical example being the server's address. In this case, all the small partners that define constant characters with a macro are defined with a const! Why is it? Let's see:
Macro usage: General string extraction macro, code to use macros.
Const usage: Commonly used strings are defined as const (for constant strings Apple recommends that we use const).
- Differences between macros and const:
- 1. The compile time is different, the macro is precompiled, the const belongs to the compile time
- 2. Macro can define the code, const can not, multiple macros for the compilation will be relatively long, the impact of development efficiency, debugging too slow, const will only compile once, shorten the compilation time.
- 3. Macros do not check for errors, const will check for errors
In comparison with the above, we later in the development if the definition of a constant string is const, define the code with a macro. Let's look at how to use const to enumerate the actual project usage methods such as:
In I simply define a few constant strings, we create a class as long as it contains #import in. h and. m
Common macro Definition collection for IOS daily work