zoukankan      html  css  js  c++  java
  • iOS常用宏定义

    为了简化开发流程,提升工作效率,收集了一些平时常用的宏定义,今后会不定期更新

    1.UI元素

    //NavBar高度
    #define NAVIGATIONBAR_HEIGHT 44
    
    //StatusBar高度
    #define STATUSBAR_HEIGHT 20
    
    //获取屏幕 宽度、高度
    #define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)
    #define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)
    
    //内容视图高度
    #define CONTENT_HEIGHT (SCREEN_HEIGHT - NAVIGATIONBAR_HEIGHT - STATUSBAR_HEIGHT)
    
    //KWindow
    #define KWINDOW [UIApplication sharedApplication].keyWindow
    
    //屏幕分辨率
    #define SCREEN_RESOLUTION (SCREEN_WIDTH * SCREEN_HEIGHT * ([UIScreen mainScreen].scale))
    
    //状态栏 + 导航栏 高度
    #define STATUS_AND_NAVIGATION_HEIGHT ((STATUSBAR_HEIGHT) + (NAVIGATIONBAR_HEIGHT))
    
    

    2.Log

    //(在系统Log基础之上,加入自定义的相关信息)
    #define NSLog(format, ...) do {                                             
    fprintf(stderr, "<%s : %d> %s
    ",                                           
    [[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String],  
    __LINE__, __func__);                                                        
    (NSLog)((format), ##__VA_ARGS__);                                           
    fprintf(stderr, "-------
    ");                                               
    } while (0)
    

    3.系统

    //获取当前系统版本
    #define IOS_VERSION [[[UIDevice currentDevice] systemVersion] floatValue]
    #define CurrentSystemVersion [[UIDevice currentDevice] systemVersion]
    
    //获取当前系统语言
    #define CurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0])
    
    //判断是不是真机
    #if TARGET_OS_IPHONE
        //iPhone Device
    #endif
    
    //判断是不是模拟器
    #if TARGET_IPHONE_SIMULATOR
        //iPhone Simulator
    #endif
    
    //是否在ARC环境下
    #if __has_feature(objc_arc)
        //compiling with ARC
    #else
        //compiling without ARC
    #endif
    
    //判断是否为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 5(S)(E)
    #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
    
    //判断 iOS 或更高的系统版本
    #define IOS_VERSION_6_OR_LATER (([[[UIDevice currentDevice] systemVersion] floatValue]>=6.0)? (YES):(NO))
    #define IOS_VERSION_7_OR_LATER (([[[UIDevice currentDevice] systemVersion] floatValue]>=7.0)? (YES):(NO))
    #define IOS_VERSION_8_OR_LATER (([[[UIDevice currentDevice] systemVersion] floatValue]>=8.0)? (YES):(NO))
    #define IOS_VERSION_9_OR_LATER (([[[UIDevice currentDevice] systemVersion] floatValue]>=9.0)? (YES):(NO))
    #define IOS_VERSION_10_OR_LATER (([[[UIDevice currentDevice] systemVersion] floatValue]>=10.0)? (YES):(NO))
    
    //系统版本工具
    #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 IsPortrait ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait || [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown)
    
    

    4.颜色类

    //带有RGBA的颜色设置
    #define COLOR(R, G, B, A) [UIColor colorWithRed:R/255.0 green:G/255.0 blue:B/255.0 alpha:A]
    
    //设置随机颜色(调试时候很有用)
    #define RandomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0]
    
    //16进制颜色
    #define RGB16Color(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]
    

    5.通知

    //获取通知中心
    #define NotificationCenter [NSNotificationCenter defaultCenter]
    
    //快速发通知
    #define Post_Notify(_notificationName, _obj, _userInfoDictionary) [[NSNotificationCenter defaultCenter] postNotificationName: _notificationName object: _obj userInfo: _userInfoDictionary];
    
    //添加观察者
    #define Add_Observer(_notificationName, _observer, _observerSelector, _obj) [[NSNotificationCenter defaultCenter] addObserver:_observer selector:@selector(_observerSelector) name:_notificationName object: _obj];
    
    //移除观察者
    #define Remove_Observer(_observer) [[NSNotificationCenter defaultCenter] removeObserver: _observer];
    

    6.数据存储

    //NSUserDefaults 实例化
    #define USER_DEFAULT [NSUserDefaults standardUserDefaults]
    
    //获取temp
    #define kPathTemp NSTemporaryDirectory()
    
    //获取沙盒Document
    #define kPathDocument [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) firstObject]
    
    //获取沙盒Cache
    #define kPathCache [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask, YES) firstObject]
    

    7.单例模式

    #define SingleH(name) +(instancetype)share##name;
    
    #if __has_feature(objc_arc)
    //条件满足 ARC
    #define SingleM(name) static id _instance;
    +(instancetype)allocWithZone:(struct _NSZone *)zone
    {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    _instance = [super allocWithZone:zone];
    });
    
    return _instance;
    }
    
    +(instancetype)share##name
    {
    return [[self alloc]init];
    }
    
    -(id)copyWithZone:(NSZone *)zone
    {
    return _instance;
    }
    
    -(id)mutableCopyWithZone:(NSZone *)zone
    {
    return _instance;
    }
    
    #else
    //MRC
    #define SingleM(name) static id _instance;
    +(instancetype)allocWithZone:(struct _NSZone *)zone
    {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    _instance = [super allocWithZone:zone];
    });
    
    return _instance;
    }
    
    +(instancetype)share##name
    {
    return [[self alloc]init];
    }
    
    -(id)copyWithZone:(NSZone *)zone
    {
    return _instance;
    }
    
    -(id)mutableCopyWithZone:(NSZone *)zone
    {
    return _instance;
    }
    -(oneway void)release
    {
    }
    
    -(instancetype)retain
    {
        return _instance;
    }
    
    -(NSUInteger)retainCount
    {
        return MAXFLOAT;
    }
    #endif
    

    8.时间

    //获取系统时间戳
    #define CurentTime [NSString stringWithFormat:@"%ld", (long)[[NSDate date] timeIntervalSince1970]]
    

    9.权限

    //获取相机权限状态
    #define CameraStatus [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]
    #define CameraDenied ((CameraStatus == AVAuthorizationStatusRestricted)||(CameraStatus == AVAuthorizationStatusDenied))
    #define CameraAllowed (!CameraDenyed)
    
    /** 定位权限*/
    #define LocationStatus [CLLocationManager authorizationStatus];
    #define LocationAllowed ([CLLocationManager locationServicesEnabled] && !((status == kCLAuthorizationStatusDenied) || (status == kCLAuthorizationStatusRestricted)))
    #define LocationDenied (!LocationAllowed)
    
    /** 消息推送权限*/
    #define PushClose (([[UIDevice currentDevice].systemVersion floatValue]>=8.0f)?(UIUserNotificationTypeNone == [[UIApplication sharedApplication] currentUserNotificationSettings].types):(UIRemoteNotificationTypeNone == [[UIApplication sharedApplication] enabledRemoteNotificationTypes]))
    #define PushOpen (!PushClose)
    

    10.本地文件加载

    #define LoadImage(file,type) [UIImage imageWithContentsOfFile:[[NSBundle mainBundle]pathForResource:file ofType:type]]
    #define LoadArray(file,type) [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle]pathForResource:file ofType:type]]
    #define  LoadDict(file,type) [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle]pathForResource:file ofType:type]]
    

    11.Block

    //弱引用
    #define WeakWithNameAndObject(obj,name)   __weak   typeof(obj) weak##name   = obj
    //强引用
    #define StrongWithNameAndObject(obj,name) __strong typeof(obj) strong##name = obj
    
  • 相关阅读:
    一个.java文件内只能写一个class吗
    Ubuntu下手动安装NextCloud
    基于 Ubuntu + nextCloud 搭建自己的私人网盘
    Ubuntu系统Apache 2部署SSL证书
    交叉验证与训练集、验证集、测试集
    [LeetCode] Restore IP Addresses
    [LeetCode] Decode Ways
    [LeetCode] Subsets II
    [LeetCode] Gray Code
    vector 的resize 和 reserve
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/11175720.html
Copyright © 2011-2022 走看看