iOS中常用的一些宏

#define isIphone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)
#define isIphone4 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO)
#define isIphone6 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO)
#define isIphone6p ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) : NO)
#define IS_IPAD   (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)


#define IOS9_OR_LATER ([[[UIDevice currentDevice] systemVersion] compare:@"9.0"] != NSOrderedAscending)
#define IOS8_OR_LATER ([[[UIDevice currentDevice] systemVersion] compare:@"8.0"] != NSOrderedAscending)
#define IOS7_OR_LATER ([[[UIDevice currentDevice] systemVersion] compare:@"7.0"] != NSOrderedAscending)
#define IOS6_OR_LATER ([[[UIDevice currentDevice] systemVersion] compare:@"6.0"] != NSOrderedAscending)
#define IOS5_OR_LATER ([[[UIDevice currentDevice] systemVersion] compare:@"5.0"] != NSOrderedAscending)
#define IOS4_OR_LATER ([[[UIDevice currentDevice] systemVersion] compare:@"4.0"] != NSOrderedAscending)
#define IOS3_OR_LATER ([[[UIDevice currentDevice] systemVersion] compare:@"3.0"] != NSOrderedAscending)

#define IOS_SYSTEM_VERSION [[[UIDevice currentDevice] systemVersion] floatValue](谨慎使用,floatValue是不靠谱的,具体原因请看:http://www.jianshu.com/p/528897755dc8)

//获取当前语言
#define CurrentLanguage  ([[NSLocale preferredLanguages ] objectAtIndex:0])

//判断是否为空(注意:判断为空这里再加一个   <null>     数组字符串也像第一个那样做“null”的判断)
#define IsNilOrNull(_ref)  (((_ref) == nil) || ([(_ref) isEqual:[NSNull null]]) || ([(_ref) isEqual:@"null"]) || ([(_ref) isEqual:@"(null)"]))

#define IsStrEmpty(_ref)  (((_ref) == nil) || ([(_ref) isEqual:[NSNull null]]) || ([(_ref) isEqualToString:@""]))

#define IsArrEmpty(_ref)  (((_ref) == nil) || ([(_ref) isEqual:[NSNull null]]) || ([(_ref) count] == 0))

#define kDeviceWidth  ([UIScreen mainScreen].bounds.size.width)
#define kDeviceHeight  ([UIScreen mainScreen].bounds.size.height)
#define kNavBarHeight  64.0
#define kCurrentWidth(x) ([UIScreen mainScreen].bounds.size.width/320.0)*x

#define kClearColor       [UIColor clearColor]
#define kWhiteColor       [UIColor whiteColor]
#define kBlackColor       [UIColor blackColor]
#define kDarkGrayColor    [UIColor darkGrayColor]
#define kLightGrayColor   [UIColor lightGrayColor]
#define kGrayColor        [UIColor grayColor]
#define kRedColor         [UIColor redColor]
#define kGreenColor       [UIColor greenColor]
#define kBlueColor        [UIColor blueColor]
#define kCyanColor        [UIColor cyanColor]
#define kYellowColor      [UIColor yellowColor]
#define kMagentaColor     [UIColor magentaColor]
#define kOrangeColor      [UIColor orangeColor]
#define kPurpleColor      [UIColor purpleColor]
#define kBrownColor       [UIColor brownColor]
#define kBackgroundColor    [UIColor colorWithHexString:@"eeeeee"]
#define kSepparteLineColor  [UIColor colorWithHexString:@"c8c8c8"]
#define RGBCOLOR(r,g,b)  [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1]
#define RGB1COLOR(r,g,b,a)  [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)] 
#define LRRandomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0]

//rgb颜色转换(16进制->10进制)
#define UIColorFromRGB(rgbValue)  [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0f green:((float)((rgbValue & 0xFF00) >> 8))/255.0f blue:((float)(rgbValue & 0xFF))/255.0f alpha:(a)]

<pre name="code" class="html">#define kSystem(size)  [UIFont systemFontOfSize:size]<pre name="code" class="html">//根据部分标注图
//#define kSystem(size)  [UIFont systemFontOfSize:(size/(0.85))]
<span style="font-family: Arial, Helvetica, sans-serif;">#define kSystemBold(size) [UIFont boldSystemFontOfSize:size]</span>
/// 快速拼接字符串#define StringWithFomat2(str1, str2) [NSString stringWithFormat:@"%@%@", str1, str2]
//本地转换#undef L#define L(key) \[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]
//多除点击事件用block处理时,可将block写在宏里面,点击时间里面调用就可以
typedef void (^SNBasicBlock)(void);

 
<pre name="code" class="html">/*SN_EXTERN*/
#if !defined(SN_EXTERN)
#  if defined(__cplusplus)
#    defined SN_EXTERN extern "C"
#  else
#    define SN_EXTERN extern
#  endif
#endif

 
<pre name="code" class="html">支持横屏
#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

判断是真机还是模拟器
#if TARGET_OS_IPHONE
//iPhone Device
#endif
#if TARGET_IPHONE_SIMULATOR
//iPhone Simulator
#endif

 
<pre name="code" class="html">处理循环引用问题(处理当前类对象)
#define WS(weakSelf) __weak __typeof(&*self)weakSelf = self;
 
<pre name="code" class="html">宏与const 的使用
很多小伙伴在定义一个常量字符串,都会定义成一个宏,最典型的例子就是服务器的地址。在此所有用宏定义常量字符的小伙伴以后就用const来定义吧!为什么呢 ?我们看看:
宏的用法:一般字符串抽成宏,代码抽成宏使用。
const用法:一般常用的字符串定义成const(对于常量字符串苹果推荐我们使用const)。
宏与const区别:
1.编译时刻不同,宏属于预编译 ,const属于编译时刻
2.宏能定义代码,const不能,多个宏对于编译会相对时间较长,影响开发效率,调试过慢,const只会编译一次,缩短编译时间。
3.宏不会检查错误,const会检查错误
通过以上对比,我们以后在开发中如果定义一个常量字符串就用const,定义代码就用宏。
static NSString * const loginAccount = @"loginAccount";static NSString * const loginPassword = @"loginPassword";
 
<pre name="code" class="html">单例化一个类
//声明
#define DECLARE_SYNTHESIZE_SINGLETON_FOR_CLASS(classname) 
 
+ (classname *)sharedInstance; 
 
//实现
#define IMPLEMENT_SYNTHESIZE_SINGLETON_FOR_CLASS(classname) 
 
 static classname *shared##classname = nil; 
 
+ (classname *)sharedInstance 
 { 
    @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; 
}
使用方法:在你需要创建单例类的类的.h和.m文件中分别加入以下代码(首先导入以上代码所处的头文件)
DECLARE_SYNTHESIZE_SINGLETON_FOR_CLASS(LoginManager)(.h)声明 IMPLEMENT_SYNTHESIZE_SINGLETON_FOR_CLASS(LoginManager)(.m)实现
 
 
处理NSLog事件(开发者模式打印,发布者模式不打印)
#ifdef DEBUG
#define NSLog(FORMAT, ...) fprintf(stderr,"%s:%d\t%s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#else
#define NSLog(FORMAT, ...) nil
#endif


 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值