//获取屏幕 宽度、高度 #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