美文网首页
iOS常用宏定义

iOS常用宏定义

作者: 为什么划船不靠桨 | 来源:发表于2017-07-02 14:08 被阅读0次

    字符串是否为空

    #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))
    

    获取屏幕宽度与高度 ( " \ ":连接行标志,连接上下两行 )

     #define kScreenWidth \
      ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)] ? [UIScreen mainScreen].nativeBounds.size.width/[UIScreen mainScreen].nativeScale : [UIScreen mainScreen].bounds.size.width)
    
      #define kScreenHeight \
      ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)] ? [UIScreen mainScreen].nativeBounds.size.height/[UIScreen mainScreen].nativeScale : [UIScreen mainScreen].bounds.size.height)
    
      #define kScreenSize \
      ([[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)
    

    常用的缩写

    #define kApplication        [UIApplication sharedApplication]
    
      #define kKeyWindow          [UIApplication sharedApplication].keyWindow
    
      #define kAppDelegate        [UIApplication sharedApplication].delegate
    
      #define kUserDefaults      [NSUserDefaults standardUserDefaults]
    
      #define kNotificationCenter [NSNotificationCenter defaultCenter]
    

    APP版本号

    #define kAppVersion [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]
    

    系统版本号

    #define kSystemVersion [[UIDevice currentDevice] systemVersion] floatValue]
    

    判断系统版本

    #define IOS11 ([[[UIDevice currentDevice] systemVersion] floatValue]>=11.0) && ([[[UIDevice currentDevice] systemVersion] floatValue] <12.0)
    
    #define IOS10 ([[[UIDevice currentDevice] systemVersion] floatValue]>=10.0) && ([[[UIDevice currentDevice] systemVersion] floatValue] <11.0)
    
    #define IOS9 ([[[UIDevice currentDevice] systemVersion] floatValue]>=9.0) && ([[[UIDevice currentDevice] systemVersion] floatValue] <10.0)
    
    #define IOS8 ([[[UIDevice currentDevice] systemVersion] floatValue]>=8.0) && ([[[UIDevice currentDevice] systemVersion] floatValue] <9.0)
    

    获取当前语言

    #define kCurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0])
    

    判断是否为iPhone

     #define kISiPhone (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    #define UI_IS_IPHONE ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
    

    判断是什么类型的手机

    #define UI_IS_IPHONE5           (UI_IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0)
    #define UI_IS_IPHONE6           (UI_IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0)
    #define UI_IS_IPHONE6PLUS       (UI_IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 736.0)
    #define UI_IS_IPHONEX           (UI_IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 812.0)
    

    判断是否为iPad

    #define kISiPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    

    获取沙盒Document路径

     #define kDocumentPath [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]
    

    获取沙盒temp路径

    #define kTempPath NSTemporaryDirectory()
    

    获取沙盒Cache路径

     #define kCachePath [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]
    

    判断是真机还是模拟器

    #if TARGET_OS_IPHONE
      //真机
      #endif
      #if TARGET_IPHONE_SIMULATOR
      //模拟器
      #endif
    

    自定义NSLog(开发的时候打印,但是发布的时候不打印的NSLog)

    #ifdef DEBUG
      #define NSLog(...) NSLog(@"%s 第%d行 \n %@\n\n",__func__,__LINE__,[NSString stringWithFormat:__VA_ARGS__])
      #else
       #define NSLog(...)
       #endif
    

    颜色

    #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]
    

    弱引用/强引用

    #define kWeakSelf(type)  __weak typeof(type) weak##type = type;
    
      #define kStrongSelf(type) __strong typeof(type) type = weak##type;
    

    由角度转换弧度

     #define kDegreesToRadian(x)      (M_PI * (x) / 180.0)
    

    由弧度转换角度

    #define kRadianToDegrees(radian) (radian * 180.0) / (M_PI)
    

    获取一段时间间隔

    #define kStartTime CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
    
      #define kEndTime  NSLog(@"Time: %f", CFAbsoluteTimeGetCurrent() - start)
    

    获取屏幕 宽度、高度

    #define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)
    
      #define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)
    

    读取本地图片

      #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]
    

    //建议使用前两种宏定义,性能高于后者

    单例化一个类

     #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; \
      }
    
      #endif
    

    view设置圆角

    #define ViewBorderRadius(View, Radius, Width, Color)\
    \
    [View.layer setCornerRadius:(Radius)];\
    [View.layer setMasksToBounds:YES];\
    [View.layer setBorderWidth:(Width)];\
    [View.layer setBorderColor:[Color CGColor]]
    

    GCD代码只执行一次

    #define kDISPATCH_ONCE_BLOCK(onceBlock) static dispatch_once_t onceToken; dispatch_once(&onceToken, onceBlock);
    

    字符串FORMAT格式化

    #define FORMAT(f, ...)      [NSString stringWithFormat:f, ## __VA_ARGS__]
    

    字体

    #define FontL(s)             [UIFont systemFontOfSize:s weight:UIFontWeightLight]
    #define FontR(s)             [UIFont systemFontOfSize:s weight:UIFontWeightRegular]
    #define FontB(s)             [UIFont systemFontOfSize:s weight:UIFontWeightBold]
    #define FontT(s)             [UIFont systemFontOfSize:s weight:UIFontWeightThin]
    #define Font(s)              FontL(s)
    

    在主线程上运行

    #define kDISPATCH_MAIN_THREAD(mainQueueBlock) dispatch_async(dispatch_get_main_queue(), mainQueueBlock);
    

    开启异步线程

    #define kDISPATCH_GLOBAL_QUEUE_DEFAULT(globalQueueBlock) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), globalQueueBlocl);
    

    通知

    #define NOTIF_ADD(n, f)     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(f) name:n object:nil]
    #define NOTIF_POST(n, o)    [[NSNotificationCenter defaultCenter] postNotificationName:n object:o]
    #define NOTIF_REMV()        [[NSNotificationCenter defaultCenter] removeObserver:self]
    

    适配屏幕文字大小

    //这里拿苹果6的屏幕尺寸作为标准
    #define autoSizeScaleX SCREENWIDTH/375
    

    相关文章

      网友评论

          本文标题:iOS常用宏定义

          本文链接:https://www.haomeiwen.com/subject/euincxtx.html