iOSマクロのいくつかの使用

14238 ワード

開発においては、マクロやカスタムマクロを使用する必要があります.
マクロは名前付きコードセグメントです.マクロを使用するとコードセグメントの置換が行われます.二つのマクロのタイプがあります.一つはクラスオブジェクトのマクロで、パッケージに使用されるデータオブジェクトで、もう一つはクラス関数のマクロで、パッケージ関数の呼び出しです.
以下はC言語で使用されるマクロコマンドです.
#define         
#undef       
#include       
#include_next  #include  ,          
#if            ,    C    if  
#ifdef           ,     ,        
#ifndef  #ifdef  ,            
#elif  #if, #ifdef, #ifndef    #elif     ,    #elif     ,    C    else-if
#else  #if, #ifdef, #ifndef  ,         ,    #else     ,    C    else
#endif #if, #ifdef, #ifndef           .
#defined  #if, #elif    ,           
#line           
#                     
##         (token)          
#pragma        
#warning         
#error         
マクロのいくつかのシステムツール方法
...:     
__COUNTER__        ,             ++,               
__FILE__:         ,   log 
__LINE__:            ,   log 
__func__:  scope     ,   log                    
 __DATE__: “    ”                ,     “mm dd yyyy”(  :“Mar 19 2006”)。      10 ,            。NSLog(@"_DATE_=%s",__DATE__);
__FUNCTION__:      
__TIME__:              ,   “hh:mm:ss”(  :“08:00:59”)。
__STDC__:    1,        ISOC  。
iOSシステムにはバージョン制御用のマクロがいくつか定義されています.
__IPHONE_OS_VERSION_MIN_REQUIRED  //  app         
__IPHONE_OS_VERSION_MAX_ALLOWED  //  app       
#define __IPHONE_7_0 70000
#define __IPHONE_7_1 70100
#define __IPHONE_8_0 80000
#define __IPHONE_8_1 80100
#define __IPHONE_8_2 80200
#define __IPHONE_8_3 80300
#define __IPHONE_8_4 80400
#define __IPHONE_9_0 90000
#define __IPHONE_9_1 90100
#define __IPHONE_9_2 90200
よく使うカスタムマクロの整理:
  • デバイス関連のマクロ
    #define isPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
    #define CurrentSystemVersion ([[UIDevice currentDevice] systemVersion]) 
    #define CurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0]) 
    //    7.0 ios  
    #define iOS7_OR_LATER SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")
    #define IsNilOrNull(_ref) (((_ref) == nil) || ([(_ref) isEqual:[NSNull null]]))
    //       
    #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)
  • UI一般マクロ
    #define UI_NAVIGATION_BAR_HEIGHT 44
    #define UI_TOOL_BAR_HEIGHT 44
    #define UI_TAB_BAR_HEIGHT 49
    #define UI_STATUS_BAR_HEIGHT 20
    #define UI_SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
    #define UI_SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
  • は、全体的に区別するためのマクロ
    /* ****** release ,  NSLog ****** */
    #if defined (DEBUG) && DEBUG == 1 
    #else 
    #define NSLog(...) {}; 
    #endif 
    // log      
    #ifdef DEBUG
    # define DLog(...) NSLog((@"%s [Line %d] %@"), __PRETTY_FUNCTION__, __LINE__, [NSString stringWithFormat:__VA_ARGS__])
    # define SLog(...) NSLog(__VA_ARGS__)
    #else
    # define DLog(...)
    # define SLog(...)
    #endif
    /* ******       ARC      ****** */
    #if __has_feature(objc_arc) 
    //compiling with ARC 
    #else 
     // compiling without ARC 
    #endif 
    /* ******          ****** */
    #if TARGET_OS_IPHONE 
    //iPhone Device 
    #endif 
    #if TARGET_IPHONE_SIMULATOR 
    //iPhone Simulator 
    #endif
  • である.
  • 色初期化マクロ
    // 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]
    //   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 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"]
  • マクロ関数の一部
    #define degreesToRadian(x) (M_PI * (x) / 180.0) //     
    #define radianToDegrees(radian) (radian*180.0)/(M_PI) //     
    #pragma mark -   
    #define DeclareSingletonInterface(className) \
    +(classname *)shared##classname
    #define ImplementSingletonInterface(className) \
    +(classname *)shared##classname { \
    static dispatch_once_t onceToken = 0; \
    static id sharedInstance = nil; \
    dispatch_once(&onceToken, ^{ \
    sharedInstance = [[self alloc] init]; \
    }); \
    return sharedInstance; \
    }
  • ここは他の人の参考にしていますので、参考にしてみてください.