English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
As everyone knows, using macros is not only convenient but also can improve development efficiency. The following summarizes some commonly used macros in the iOS development process, and will continue to add to them.
Objective-C
//Whether the string is empty #define kStringIsEmpty(str) ([str isKindOfClass:[NSNull class]] || str == nil || [str length] < 1 ? YES : NO ) //Whether the array is empty #define kArrayIsEmpty(array) (array == nil || [array isKindOfClass:[NSNull class]] || array.count == 0) //Whether the dictionary is empty #define kDictIsEmpty(dic) (dic == nil || [dic isKindOfClass:[NSNull class]] || dic.allKeys == 0) //Whether it is an empty object #define kObjectIsEmpty(_object) (_object == nil \ || [_object isKindOfClass:[NSNull class]] \ || ([_object respondsToSelector:@selector(length)] && [((NSData *)_object length] == 0) \ || ([_object respondsToSelector:@selector(count)] && [((NSArray *)_object count] == 0)) //Get screen width and height #define kScreenWidth \ [[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]63; [UIScreen mainScreen].nativeBounds.size.width/[UIScreen mainScreen].nativeScale : [UIScreen mainScreen].bounds.size.width) #define kScreenHeight \ [[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]63; [UIScreen mainScreen].nativeBounds.size.height/[UIScreen mainScreen].nativeScale : [UIScreen mainScreen].bounds.size.height) #define kScreenSize \ [[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]63; CGSizeMake([UIScreen mainScreen].nativeBounds.size.width/[UIScreen mainScreen].nativeScale, [UIScreen mainScreen].nativeBounds.size.height/[UIScreen mainScreen].nativeScale) : [UIScreen mainScreen].bounds.size) //Some abbreviations #define kApplication [UIApplication sharedApplication] #define kKeyWindow [UIApplication sharedApplication].keyWindow #define kAppDelegate [UIApplication sharedApplication].delegate #define kUserDefaults [NSUserDefaults standardUserDefaults] #define kNotificationCenter [NSNotificationCenter defaultCenter] //APP version number #define kAppVersion [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"] //System version number #define kSystemVersion [[UIDevice currentDevice] systemVersion] //Get the current language #define kCurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0]) //Determine if it is an iPhone #define kISiPhone (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) //Determine if it is an iPad #define kISiPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) //Get the sandbox Document path #define kDocumentPath [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] //Get the sandbox temp path #define kTempPath NSTemporaryDirectory() //Get the sandbox Cache path #define kCachePath [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject] //Determine if it is a real device or simulator #if TARGET_OS_IPHONE //Real Device #endif #if TARGET_IPHONE_SIMULATOR //Simulator #endif //NSLog for debugging, but not for release #ifdef DEBUG #define NSLog(...) NSLog(@"%s 第%d行 \n %@\n\n",__func__,__LINE__,[NSString stringWithFormat:__VA_ARGS__]) #else #define NSLog(...) #endif //Color #define kRGBColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0] #define kRGBAColor(r, g, b, a) [UIColor colorWithRed:(r)/255.0 green:(r)/255.0 blue:(r)/255.0 alpha:a] #define kRandomColor KRGBColor(arc4random_uniform(256)/255.0,arc4random_uniform(256)/255.0,arc4random_uniform(256)/255.0) #define kColorWithHex(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] //Weak reference/Strong reference #define kWeakSelf(type) __weak typeof(type) weak##type = type; #define kStrongSelf(type) __strong typeof(type) type = weak##type; //Convert degrees to radians #define kDegreesToRadian(x) (M_PI * (x) / 180.0) //Convert radians to degrees #define kRadianToDegrees(radian) (radian * 180.0) / (M_PI) //Obtain a time interval #define kStartTime CFAbsoluteTime start = CFAbsoluteTimeGetCurrent(); #define kEndTime NSLog(@"Time: %f", CFAbsoluteTimeGetCurrent()) - start)
1.Define macros for dimension classes
DimensMacros.h //Status bar height #define STATUS_BAR_HEIGHT 20 //NavBar height #define NAVIGATION_BAR_HEIGHT 44 //Status bar + navigation bar height #define STATUS_AND_NAVIGATION_HEIGHT ((STATUS_BAR_HEIGHT) + (NAVIGATION_BAR_HEIGHT)) //Screen rect #define SCREEN_RECT ([UIScreen mainScreen].bounds) #define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width) #define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height) #define CONTENT_HEIGHT (SCREEN_HEIGHT - NAVIGATION_BAR_HEIGHT - STATUS_BAR_HEIGHT) //Screen resolution #define SCREEN_RESOLUTION (SCREEN_WIDTH * SCREEN_HEIGHT * ([UIScreen mainScreen].scale)) //Advertisement bar height #define BANNER_HEIGHT 215 #define STYLEPAGE_HEIGHT 21 #define SMALLTV_HEIGHT 77 #define SMALLTV_WIDTH 110 #define FOLLOW_HEIGHT 220 #define SUBCHANNEL_HEIGHT 62
2.Define macros for sandbox directory files
PathMacros.h //File directory #define kPathTemp NSTemporaryDirectory() #define kPathDocument [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] #define kPathCache [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0] #define kPathSearch [kPathDocument stringByAppendingPathComponent:@"Search.plist"] #define kPathMagazine [kPathDocument stringByAppendingPathComponent:@"Magazine"] #define kPathDownloadedMgzs [kPathMagazine stringByAppendingPathComponent:@"DownloadedMgz.plist"] #define kPathDownloadURLs [kPathMagazine stringByAppendingPathComponent:@"DownloadURLs.plist"] #define kPathOperation [kPathMagazine stringByAppendingPathComponent:@"Operation.plist"] #define kPathSplashScreen [kPathCache stringByAppendingPathComponent:@"splashScreen"] #endif
3.Utility class macros
UtilsMacros.h //Log utility macro #define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); #ifdef DEBUG #define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); #else #define DLog(...) #endif #ifdef DEBUG #define ULog(...) //#define ULog(fmt, ...) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"%s\n [Line %d] ", __PRETTY_FUNCTION__, __LINE__] message:[NSString stringWithFormat:fmt, ##__VA_ARGS__] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; } #else #define ULog(...) #endif //System version utils #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) // Get RGB color #define RGBA(r,g,b,a) [UIColor colorWithRed:r/255.0f green:g/255.0f blue:b/255.0f alpha:a] #define RGB(r,g,b) RGBA(r,g,b,1.0f) #define IsPortrait ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait || [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown) #define IsNilOrNull(_ref) (((_ref) == nil) || ([(_ref) isEqual:[NSNull null]])) //Convert degrees to radians #define DEGREES_TO_RADIANS(d) (d * M_PI / 180) //is greater than or equal to7.0 iOS version #define iOS7_OR_LATER SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0") //is greater than or equal to8.0 iOS version #define iOS8_OR_LATER SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0") //iOS6The starting height of view in navigation VC when #define YH_HEIGHT (iOS7_OR_LATER ? 64:0) //Get system timestamp #define getCurentTime [NSString stringWithFormat:@"%ld", (long)[[NSDate date] timeIntervalSince1970]]
4Notification-related macros
NotificationMacros.h //System Notification definitions #define TNCancelFavoriteProductNotification @"TNCancelFavoriteProductNotification" //When canceling favorite #define TNMarkFavoriteProductNotification @"TNMarkFavoriteProductNotification" //When marking as favorite #define kNotficationDownloadProgressChanged @"kNotficationDownloadProgressChanged" //Download progress changed #define kNotificationPauseDownload @"kNotificationPauseDownload" //Pause download #define kNotificationStartDownload @"kNotificationStartDownload" //Start download #define kNotificationDownloadSuccess @"kNotificationDownloadSuccess" //Download successful #define kNotificationDownloadFailed @"kNotificationDownloadFailed" //Download failed #define kNotificationDownloadNewMagazine @"kNotificationDownloadNewMagazine" Macros for server-side API interfaces APIStringMacros.h ////////////////////////////////////////////////////////////////////////////////////////////////// //Interface name related #ifdef DEBUG //Test API in Debug state #define API_BASE_URL_STRING @"http://boys.test.companydomain.com/api/" #else //Online API in Release state #define API_BASE_URL_STRING @"http://www.companydomain.com/api/" #endif //Interface #define GET_CONTENT_DETAIL @"channel/getContentDetail" //Get content details (including previous and next) #define GET_COMMENT_LIST @"comment"/getCommentList" //Get Comment List #define COMMENT_LOGIN @"comment/login" //Get Comment List #define COMMENT_PUBLISH @"comment/publish" //Publish Comment #define COMMENT_DELETE @"comment/delComment" //Delete Comment #define LOGINOUT @"common/logout" //Logout There are many other types of macros, and they are not listed one by one here Create a file named Macros.h that imports all macro-related files Macros.h #import "UtilsMacros.h" #import "APIStringMacros.h" #import "DimensMacros.h" #import "NotificationMacros.h" #import "SharePlatformMacros.h" #import "StringMacros.h" #import "UserBehaviorMacros.h" #import "PathMacros.h" Import the Macros.h file in the pch file of the xcode project XcodeProjectName-Prefix.pch #ifdef __OBJC__ #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> #import "Macros.h" #endif
This is the compilation of commonly used iOS macros, and more related materials will be supplemented later. Thank you all for your support to this site!