iOS 常见宏定义

OC中,使用一些宏定义能够减少代码,方便使用,以下为我项目中定义的宏

//自定义颜色

#define RGB(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:(1)];

#define RGBA(r, g, b, a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:(a)];

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

 

// 随机颜色

#define UICOLOR_RANDOM  [UIColor colorWithRed:(arc4random()%255)/255.0 green:(arc4random()%255)/255.0 blue:(arc4random()%255)/255.0 alpha:1.0]

 

 

//弱引用/强引用

#define weakify(o) __typeof__(o) __weak o##__weak_ = o;

#define strongify(o) __typeof__(o##__weak_) __strong o = o##__weak_;

 

 

// 当前屏幕宽

#define JScreenWidth   ([UIScreen mainScreen].bounds.size.width)

// 当前屏幕高

#define JScreenHeight   ([UIScreen mainScreen].bounds.size.height)

 

//keyWindow实例化

#define JWindow [UIApplication sharedApplication].keyWindow

// 手机系统版本

#define JSystemVersion [[UIDevice currentDevice] systemVersion]

//如果支持横屏可以用下面的宏:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 // 当前Xcode支持iOS8及以上

#define SCREEN_WIDTH ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]?[UIScreen mainScreen].nativeBounds.size.width/[UIScreen mainScreen].nativeScale:[UIScreen mainScreen].bounds.size.width)

#define SCREENH_HEIGHT ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]?[UIScreen mainScreen].nativeBounds.size.height/[UIScreen mainScreen].nativeScale:[UIScreen mainScreen].bounds.size.height)

#define SCREEN_SIZE ([[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)

#else

#define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width

#define SCREENH_HEIGHT [UIScreen mainScreen].bounds.size.height

#define SCREEN_SIZE [UIScreen mainScreen].bounds.size

#endif

 

 

//NSUserDefaults 实例化

#define JUSER_DEFAULT [NSUserDefaults standardUserDefaults]

//通知

#define  J_NOTIFICATIONCENTER                      [NSNotificationCenter defaultCenter]

 

 

//重定义打印方法

#ifdef DEBUG

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

#else

#define debugLog(...)

#endif


//设置图片

#define SETIMAGE(name)                              [[UIImage imageNamed:(name)]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]

//设置(方正黑体简体字体)字体大小

#define FONT(F)  [UIFont systemFontOfSize:F]

//获取图片资源

#define JLGetImage(imageName) [UIImage imageNamed:[NSString stringWithFormat:@"%@",imageName]]

//获取一段时间间隔

#define kStartTime CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();

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

 

 

//是否是空类

#define IS_NULL(x)                                  [x isEqual:[NSNull null]]

//获取当前语言

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

 

//设置 view 圆角和边框

#define JLViewBorderRadius(View, Radius, Width, Color)\

\

[View.layer setCornerRadius:(Radius)];\

[View.layer setMasksToBounds:YES];\

[View.layer setBorderWidth:(Width)];\

[View.layer setBorderColor:[Color CGColor]]

 

//由角度转换弧度 由弧度转换角度

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

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

 

//使用 ARC 和 MRC

#if __has_feature(objc_arc)

// ARC

#else

// MRC

#endif

 

/**

 判断是真机还是模拟器

 */

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

#if TARGET_OS_IPHONE

#endif

#if (TARGET_IPHONE_SIMULATOR)

// 在模拟器的情况下

#else

// 在真机情况下

#endif

 

/**

 沙盒目录文件

 */

//获取temp

#define kPathTemp NSTemporaryDirectory()

//获取沙盒 Document

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

//获取沙盒 Cache

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

 

/**

 GCD 的宏定义

 */

//GCD - 一次性执行

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

//GCD - 在Main线程上运行

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

//GCD - 开启异步线程

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

//GCD - 安全访问

#ifndef dispatch_main_async_safe

#define dispatch_main_async_safe(block)\

if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(dispatch_get_main_queue())) ==0) {\

block();\

} else {\

dispatch_async(dispatch_get_main_queue(), block);\

}

#endif

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值