//获取屏幕 宽度、高度 #define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width) #define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)
// 根据版本号导入文件
#ifdef NSFoundationVersionNumber_iOS_9_x_Max #import <UserNotifications/UserNotifications.h> #endif
/** * 版本号 * * @param CFBundleShortVersionString * * @return kVersion */ #define kVersion [NSString stringWithFormat:@"%@",[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]]
/** * iPhone or iPad */ #define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) #define IS_PAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IPHONE4S ((SCREEN.height == 480.0f)?YES:NO) #define IPHONE5 ((SCREEN.height == 568.0f)?YES:NO) #define IPHONE6 ((SCREEN.height == 667.0f)?YES:NO) #define IPHONE6P ((SCREEN.height == 736.0f)?YES:NO)
// 操作系统宏 #define IOS10_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) #define IOS9_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0) #define IOS8_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) #define IOS7_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
// 线程开启宏 #define dispatch_main_async_withsafe(block) if ([NSThread isMainThread]) { block(); } else { dispatch_async(dispatch_get_main_queue(), block); } #define dispatch_global_async_withsafe(block) if ([NSThread isMainThread]) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),block); } else { block(); }
单粒模式宏定义
#pragma mark - 实例定义 #define SingletenInterface + (instancetype)sharedInstance; #pragma mark - 定义单例代码块 #define SingletenImpl static id _instace; + (id)allocWithZone:(struct _NSZone *)zone { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instace = [super allocWithZone:zone]; }); return _instace; } - (id)copyWithZone:(NSZone *)zone { return _instace; } + (instancetype)sharedInstance { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instace = [[self alloc] init]; }); return _instace; }
宏中使用##,传入参数作为shared方法名称:
// // Singleten.h // 可变参数测试 // // Created by HJiang on 2017/9/1. // Copyright © 2017年 HJiang. All rights reserved. // #ifndef Singleten_h #define Singleten_h #pragma mark - 实例定义 #define SingletenInterface(name) + (instancetype)shared##name; #pragma mark - 定义单例代码块 #define SingletenImpl(name) static id _instace; + (id)allocWithZone:(struct _NSZone *)zone { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instace = [super allocWithZone:zone]; }); return _instace; } - (id)copyWithZone:(NSZone *)zone { return _instace; } + (instancetype)shared##name { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instace = [[self alloc] init]; }); return _instace; } #endif /* Singleten_h */
定义开发模式和发布模式条件宏
#ifdef DEBUG #define CCDebugLog(fmt,...) if ([[NSThread currentThread] isMainThread]) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSString *newFrt = [@"[文件名:%s] [函数名:%s] [行号:%d] " stringByAppendingString:fmt ]; NSString *logContent = [NSString stringWithFormat:newFrt,__FILE__, __FUNCTION__, __LINE__,##__VA_ARGS__]; logContent = [NSString stringWithFormat:@"%@%@%@",@"#####",logContent,@"#####"]; NSLog(@"%@",logContent); }); }else{ NSString *newFrt = [@"[文件名:%s] [函数名:%s] [行号:%d] " stringByAppendingString:fmt ]; NSString *logContent = [NSString stringWithFormat:newFrt,__FILE__, __FUNCTION__, __LINE__,##__VA_ARGS__]; logContent = [NSString stringWithFormat:@"%@%@%@",@"#####",logContent,@"#####"]; NSLog(@"%@",logContent); } #else #define CCDebugLog(fmt,...) # endif
替换系统NSLog
#ifdef DEBUG #define NSLog(format, ...) printf(" [%s] %s [第%d行] %s ", __TIME__, __FUNCTION__, __LINE__, [[NSString stringWithFormat:format, ## __VA_ARGS__] UTF8String]); #else #define NSLog(format, ...) #endif