1. 程式人生 > >iOS開發中常用的宏

iOS開發中常用的宏

tar lin iter standard ffi ant height same alt

  • OC對象判斷是否為

    • 字符串是否為空
      #define kStringIsEmpty(str) ([str isKindOfClass:[NSNull class]] || str == nil || [str length] < 1 ? YES : NO )
    • 數組是否為空
      #define kArrayIsEmpty(array) (array == nil || [array isKindOfClass:[NSNull class]] || array.count == 0)
    • 字典是否為空
      #define kDictIsEmpty(dic) (dic == nil || [dic isKindOfClass:[NSNull class]] || dic.allKeys == 0)
    • 是否是空對象
      #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))
  • UI尺寸類的宏

    • 狀態欄高度
      #define STATUS_BAR_HEIGHT 20
    • NavBar導航欄高度
      #define NAVIGATION_BAR_HEIGHT 44
    • 狀態欄 + 導航欄 高度
      #define STATUS_AND_NAVIGATION_HEIGHT ((STATUS_BAR_HEIGHT) + (NAVIGATION_BAR_HEIGHT))
    • 屏幕 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)
    • 屏幕分辨率
      #define SCREEN_RESOLUTION (SCREEN_WIDTH * SCREEN_HEIGHT * ([UIScreen mainScreen].scale))
  • LOG日誌打印

    • DEBUG 模式下打印日誌,當前行
      #ifdef DEBUG
      # define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
      #else
      # define DLog(...)
      #endif
    • 重寫NSLog,Debug模式下打印日誌和當前行數
      #if DEBUG
      #define NSLog(FORMAT, ...) fprintf(stderr,"\nfunction:%s line:%d content:%s\n", __FUNCTION__, __LINE__, [NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
      #else
      #define NSLog(FORMAT, ...) nil
      #endif
    • DEBUG 模式下打印日誌,當前行 並彈出一個警告
      #ifdef DEBUG
      # 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
  • 判斷設備?系統?

    • 是否iPad
      #define isPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    • 是否iPad
      #define someThing (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)? ipad: iphone
    • 獲取系統版本
      #define IOS_VERSION [[UIDevice currentDevice] systemVersion] floatValue]
      #define CurrentSystemVersion [UIDevice currentDevice] systemVersion]
    • 判斷是否 Retina屏?
      #define isRetina ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [UIScreen mainScreen] currentMode].size) : NO)
  • 判斷當前的iPhone設備/系統版本

    • 判斷是否為iPhone
      #define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    • 判斷是否為iPad
      #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    • 判斷是否為ipod
      #define IS_IPOD ([[[UIDevice currentDevice] model] isEqualToString:@"iPod touch"])
    • 判斷是否為 iPhone 5SE
      #define iPhone5SE [[UIScreen mainScreen] bounds].size.width == 320.0f && [[UIScreen mainScreen] bounds].size.height == 568.0f
    • 判斷是否為iPhone 6/6s
      #define iPhone6_6s [[UIScreen mainScreen] bounds].size.width == 375.0f && [[UIScreen mainScreen] bounds].size.height == 667.0f
    • 判斷是否為iPhone 6Plus/6sPlus
      #define iPhone6Plus_6sPlus [[UIScreen mainScreen] bounds].size.width == 414.0f && [[UIScreen mainScreen] bounds].size.height == 736.0f
    • 獲取系統版本
      #define IOS_SYSTEM_VERSION [[[UIDevice currentDevice] systemVersion] floatValue]
    • 判斷 iOS 8 或更高的系統版本
      #define IOS_VERSION_8_OR_LATER (([[[UIDevice currentDevice] systemVersion] floatValue] >=8.0)? (YES):(NO))
    • 判斷設備的操做系統是不是ios7
      #define IOS7 ([[UIDevice currentDevice].systemVersion doubleValue] >= 7.0]
    • 判斷是真機還是模擬器
      #if TARGET_OS_IPHONE
      //iPhone Device
      #endif 
      #if TARGET_IPHONE_SIMULATOR
      //iPhone Simulator
      #endif
    • 檢查系統版本
      #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函數

    #define TT_RELEASE_CF_SAFELY(__REF) { if (nil != (__REF)) { CFRelease(__REF); __REF = nil; } }
  • 使用ARC和不使用ARC
#if __has_feature(objc_arc)
//compiling with ARC
#else
// compiling without ARC
#endif
#pragma mark - common functions
#define RELEASE_SAFELY(__POINTER) { [__POINTER release]; __POINTER = nil; }
  • 釋放一個對象
#define SAFE_DELETE(P) if(P) { [P release], P = nil; }
#define SAFE_RELEASE(x) [x release];x=nil
  • 圖片相關

    //讀取本地圖片
    #define LOADIMAGE(file,ext) [UIImage imageWithContentsOfFile:[NSBundle mainBundle]pathForResource:file ofType:ext]
    //定義UIImage對象
    #define IMAGE(A) [UIImage imageWithContentsOfFile:[NSBundle mainBundle] pathForResource:A ofType:nil]
    //定義UIImage對象
    #define ImageNamed(_pointer) [UIImage imageNamed:[UIUtil imageName:_pointer]
  • 顏色相關

    • rgb顏色轉換(16進制->10進制)
      #define 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]
    • 帶有RGBA的顏色設置
      #define COLOR(R, G, B, A) [UIColor colorWithRed:R/255.0 green:G/255.0 blue:B/255.0 alpha:A]
    • 設置隨機顏色
      #define LRRandomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0]
    • 獲取RGB顏色
      #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 BACKGROUND_COLOR [UIColor colorWithRed:242.0/255.0 green:236.0/255.0 blue:231.0/255.0 alpha:1.0]
    • 清除背景色
      #define CLEARCOLOR [UIColor clearColor]
      #pragma mark - color functions
      #define RGBCOLOR(r,g,b) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1]
      #define RGBACOLOR(r,g,b,a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)]
  • 方正黑體簡體字體定義

    #define FONT(F) [UIFont fontWithName:@"FZHTJW--GB1-0" size:F]
  • 網址相關
    • 定義一個API
      #define APIURL @"http://xxxxx/"
    • 登錄API
      #define APILogin [APIURL stringByAppendingString:@"Login"]
  • 設置View的tag屬性
    #define VIEWWITHTAG(_OBJECT, _TAG) [_OBJECT viewWithTag : _TAG]
  • 語言/國際化相關
    • 獲取當前語言
      #define LRCurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0])
    • 程序的本地化,引用國際化的文件
      #define MyLocal(x, ...) NSLocalizedString(x, nil)
  • 線程 G-C-D
    #define BACK(block) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block)
    #define MAIN(block) dispatch_async(dispatch_get_main_queue(),block)
  • 沙盒目錄文件
    //獲取temp
    #define kPathTemp NSTemporaryDirectory()
    //獲取沙盒 Document
    #define kPathDocument [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]
    //獲取沙盒 Cache
    #define kPathCache [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]
  • NSUserDefaults 實例化
    #define USER_DEFAULT [NSUserDefaults standardUserDefaults]
  • 由角度獲取弧度 ,由弧度獲取角度

    #define degreesToRadian(x) (M_PI * (x) / 180.0)
    #define radianToDegrees(radian) (radian*180.0)/(M_PI)
  • 單例化一個類

#define SYNTHESIZE_SINGLETON_FOR_CLASS(classname) static classname *shared##classname = nil; + (classname *)shared##classname { @synchronized(self) { if (shared##classname == nil) { shared##classname = [self alloc] init]; } } return shared##classname; } + (id)allocWithZone:(NSZone *)zone { @synchronized(self) { if (shared##classname == nil) { shared##classname = [super allocWithZone:zone]; return shared##classname; } } return nil; } - (id)copyWithZone:(NSZone *)zone { return self; }

iOS開發中常用的宏