• iOS 开发常用宏


    //字符串是否为空
    #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))
    

    //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," function:%s line:%d content:%s ", __FUNCTION__, __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);

    #else

    #define NSLog(FORMAT, ...) nil

    #endif

    //获取当前语言

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

    //判断是否 Retina屏、设备是否%fhone 5、是否是iPad

    #define isRetina ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO)

    #define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)

    #define isPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

    
    //获取屏幕宽度与高度
    #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]
    //获取当前语言
    #define kCurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0])
    //判断是否为iPhone
    #define kISiPhone (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    //判断是否为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
    #ifdef DEBUG
    #define NSLog(...) NSLog(@"%s 第%d行 
     %@
    
    ",__func__,__LINE__,[NSString stringWithFormat:__VA_ARGS__])
    #else
    #define NSLog(...)
    #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] 

    //带有RGBA的颜色设置

    #define COLOR(R, G, B, A) [UIColor colorWithRed:R/255.0 green:G/255.0 blue:B/255.0 alpha:A]

     // 获取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]

     //----------------------颜色类---------------------------

    //弱引用/强引用
    #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 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;  

    }

    //方正黑体简体字体定义

    #define FONT(F) [UIFont fontWithName:@"FZHTJW--GB1-0" size:F]

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

     
  • 相关阅读:
    时装画基础知识--如何画人体
    马士兵java视频学习顺序
    Mysql 中文字符乱码问题
    zendstudio 设置默认编码 utf-8 gbk
    MYSQL 本地无ROOT权限 忘记密码
    windows 3389 远程
    windows 老掉牙CMD的命令
    mysql-常用注入渗透手法
    ubuntu 添加多个IP
    windows下简单配置apache
  • 原文地址:https://www.cnblogs.com/xiao-love-meng/p/5826154.html
Copyright © 2020-2023  润新知