iOS 宏定义

在项目中经常用到的一些宏定义,我基本都是将宏分成几个部分,尺寸宏、系统宏、文字宏、工具类宏、定义沙盒目录文件的宏、 通知Notification相关的宏、服务端API接口的宏,还有一个管理的宏。


1、 定义尺寸类的宏

#ifndef DimensMacros_h

#define DimensMacros_h


//状态栏高度

#define STATUS_BAR_HEIGHT 20

//NavBar高度

#define NAVIGATION_BAR_HEIGHT 44

//状态栏+导航栏高度

#define STATUS_AND_NAVIGATION_HEIGHT ((STATUS_BAR_HEIGHT) + (NAVIGATION_BAR_HEIGHT))

#endif /* DimensMacros_h *



2、系统宏

#ifndef SystemHeader_h

#define SystemHeader_h


// 手机型号

#define phoneModel [[UIDevice currentDevice] model]


//手机系统版本

#define phoneVersion [[UIDevice currentDevice] systemVersion]


// 当前应用软件版本  比如:1.0.1

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


// 当前应用版本号码   int类型

#define appCurVersionNum [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]


// 手机唯一标示(需要修改)

#define phoneUUID [[UIDevice currentDevice].identifierForVendor UUIDString]


// 获取当前语言

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


//判断是否为iPhone

#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)

#define IS_IPHONE ([[[UIDevice currentDevice] model] isEqualToString:@"iPhone"])


//判断是否为iPad

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

#define IS_IPAD ([[[UIDevice currentDevice] model] isEqualToString:@"iPad"])


//判断是否为ipod

#define IS_IPOD ([[[UIDevice currentDevice] model] isEqualToString:@"iPod touch"])


/** 设备是否为iPhone 4/4S 分辨率320x480,像素640x960@2x */

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

/** 设备是否为iPhone 5C/5/5S 分辨率320x568,像素640x1136@2x */

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

/** 设备是否为iPhone 6 分辨率375x667,像素750x1334@2x */

#define iPhone6 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO)

/** 设备是否为iPhone 6 Plus 分辨率414x736,像素1242x2208@3x */

#define iPhone6P ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) : NO)


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


//大于等于7.0ios版本

#define IOS_VERSION_7_OR_LATER    ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)

//判断 iOS 8 或更高的系统版本

#define IOS_VERSION_8_OR_LATER (([[[UIDevice currentDevice] systemVersion] floatValue] >=8.0)? (YES):(NO))

//iOS6时,导航VCview的起始高度

#define YH_HEIGHT (iOS7_OR_LATER ? 64:0)


//获取系统时间戳

#define getCurentTime [NSString stringWithFormat:@"%ld", (long)[[NSDate date] timeIntervalSince1970]]


// 检查系统版本

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



#endif /* SystemHeader_h */



3、工具类的宏 

#ifndef UtilsHeader_h

#define UtilsHeader_h


/*

 * log输出

 * 项目开发中,我们会在许多地方加上Log,但是发布的时候又不想用这些Log,我们也不可能一个一个的删除,所以自定义Log是必然的!

 */

#ifdef DEBUG

#define LOG(...) NSLog(__VA_ARGS__)

#else

#define LOG(...)

#endif


// 判断是不是iOS系统,如果是iOS系统在真机和模拟器输出都是YES

#if TARGET_OS_IPHONE

#endif

#if (TARGET_IPHONE_SIMULATOR)

// 在模拟器的情况下

#else

// 在真机情况下

#endif



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

// 设置随机颜色

#define LRRandomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0]

// clear背景颜色

#define LRClearColor [UIColor clearColor]



// 判断是字符串否为空

 #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 M_PI        3.14159265358979323846264338327950288  

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

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


// 弱引用/强引用

#define LRWeakSelf(type)  __weak typeof(type) weak##type = type;

#define LRStrongSelf(type)  __strong typeof(type) type = weak##type;



// 读取本地图片

#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



// GCD

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



#endif /* UtilsHeader_h */


4、定义沙盒目录文件的宏

#ifndef PathHeader_h

#define PathHeader_h


//文件的目录

// 获取沙盒Document路径

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

// 获取沙盒temp路径

#define kTempPath NSTemporaryDirectory()

// 获取沙盒Cache路径

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

// 获取自定义plist路径

#define kDataPath                 [kPathDocument stringByAppendingPathComponent:@"data.plist"]


#endif /* PathHeader_h */


5、通知Notification相关的宏

#ifndef NotificationHeader_h

#define NotificationHeader_h


// 获取通知中心

#define LRNotificationCenter [NSNotificationCenter defaultCenter]


#define TNCancelFavoriteProductNotification     @"TNCancelFavoriteProductNotification"     //取消收藏时

#define TNMarkFavoriteProductNotification       @"TNMarkFavoriteProductNotification"       //标记收藏时


#define kNotficationDownloadProgressChanged     @"kNotficationDownloadProgressChanged"     //下载进度变化

#define kNotificationPauseDownload              @"kNotificationPauseDownload"              //暂停下载

#define kNotificationStartDownload              @"kNotificationStartDownload"              //开始下载


#define kNotificationDownloadSuccess            @"kNotificationDownloadSuccess"            //下载成功

#define kNotificationDownloadFailed             @"kNotificationDownloadFailed"             //下载失败

#define kNotificationDownloadNewMagazine        @"kNotificationDownloadNewMagazine"



#endif /* NotificationHeader_h */



 6、服务端API接口的宏

#ifndef APIStringHeader_h

#define APIStringHeader_h


#ifdef DEBUG

//Debug状态下的测试API

#define API_BASE_URL_STRING     @""


#else

//Release状态下的线上API

#define API_BASE_URL_STRING     @""


#endif


//接口

#define UPLOAD_FILE             @"/upload/file"            //上传图片

#define LOGIN                   @"/login"                  //登录

#define LOGINOUT                @"/logout"                 //登出


#endif /* APIStringHeader_h */



 7、描述文字的宏

#ifndef TextHeader_h

#define TextHeader_h


#define LoadingData @"正在加载中..."

#define LoadinSuccess @"登录成功"

#define LoadoutSuccess @"退出成功"


#endif /* TextHeader_h */



8、创建一个import所有宏相关的文件Macros.h

#ifndef Header_h

#define Header_h


#import "UIView+Extension.h"

#import "NSString+Extension.h"

#import "UIImage+ResizeImage.h"


#import "PathHeader.h"

#import "UtilsHeader.h"

#import "DimensMacros.h"

#import "TextHeader.h"

#import "APIStringHeader.h"

#import "SystemHeader.h"


#endif


最后在xcode项目的pch文件中,导入Macros.h文件

#ifdef __OBJC__

#import <UIKit/UIKit.h>

#import <Foundation/Foundation.h>

#import "SVProHUD.h"

#import "EaseUI.h"

#import <Hyphenate/Hyphenate.h>


#import "Header.h"

#endif


以上是我在项目中用到的宏,如果有我没提到大家还认为不错的宏可以给我留言说下 大家共同学习。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值