You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

125 lines
4.0 KiB

//
// TFSystemConfig.h
// TFReader
//
// Created by 谢腾飞 on 2020/12/21.
// Copyright © 2020 xtfei_2011@126.com. All rights reserved.
//
#ifndef TFSystemConfig_h
#define TFSystemConfig_h
#define WS(weakSelf) __weak __typeof(&*self)weakSelf = self;
#define SS(strongSelf)__strong __typeof(weakSelf)strongSelf = weakSelf;
// AppDelegate
#define KAppDelegate ((AppDelegate*)kRCodeSync([UIApplication sharedApplication].delegate))
// App版本
#define App_Ver [NSString stringWithString:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]]
// App名称
#define App_Name TFLocalizedString(@"小说绘")
// 系统信息文件名称
#define System_Info_Path @"systemInfo"
// 用户信息文件名称
#define User_Info_Path @"userInfo"
// 常用宏定义
#define kNotification [NSNotificationCenter defaultCenter]
//系统版本
#define is_ios7 [[[UIDevice currentDevice]systemVersion] floatValue] >= 7
#define is_ios8 [[[UIDevice currentDevice]systemVersion] floatValue] >= 8
#define is_ios9 [[[UIDevice currentDevice] systemVersion] floatValue] >= 9
#define is_ios10 [[[UIDevice currentDevice] systemVersion] floatValue] >= 10
#define is_ios11 [[[UIDevice currentDevice] systemVersion] floatValue] >= 11
#define is_ios13 [[[UIDevice currentDevice] systemVersion] floatValue] >= 13
//手机型号
#define is_iPad ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
#define is_iPhone4 ([UIScreen mainScreen].bounds.size.height == 480)
#define is_iPhone5 ([UIScreen mainScreen].bounds.size.height == 568)
#define is_iPhone6 ([UIScreen mainScreen].bounds.size.height == 667)
#define is_iPhone6P ([UIScreen mainScreen].bounds.size.height == 1104)
#define is_iPhoneX ((([[UIScreen mainScreen] bounds].size.width == 375.0 && \
[[UIScreen mainScreen] bounds].size.height == 812.0) || \
([[UIScreen mainScreen] bounds].size.width == 414.0 && \
[[UIScreen mainScreen] bounds].size.height == 896.0)) ? YES : NO)
#define is_iPhoneX_Max ((([[UIScreen mainScreen] bounds].size.width == 414.0 && \
[[UIScreen mainScreen] bounds].size.height == 896.0)) ? YES : NO)
//主窗口
#define kMainWindow (is_ios13?[[[UIApplication sharedApplication] windows] objectAtIndex:0]:[[UIApplication sharedApplication] keyWindow])
// 比对ErrorNo
#define Compare_Json_isEqualTo(A,B) (A == B)
#if __LP64__
#define MZNSI @"ld"
#define MZNSU @"lu"
#else
#define MZNSI @"d"
#define MZNSU @"u"
#endif //__LP64__
#define interface_singleton \
+ (instancetype)sharedManager;
// @implementation
#define implementation_singleton(className) \
static className *_instance_##className;\
+ (instancetype)allocWithZone:(struct _NSZone *)zone{\
static dispatch_once_t once_token_##className;\
dispatch_once(&once_token_##className, ^{\
_instance_##className = [super allocWithZone:zone];\
});\
return _instance_##className;\
}\
+ (instancetype)sharedManager{\
static dispatch_once_t once_token_##className;\
dispatch_once(&once_token_##className, ^{\
_instance_##className = [[self alloc] init];\
});\
return _instance_##className;\
}\
- (id)copyWithZone:(NSZone *)zone{\
return _instance_##className;\
}
// ???: 在主线程中执行一段代码并返回对象(返回和接收值都是id类型)
#define kRCodeSync(x) ({\
id __block temp;\
if ([NSThread isMainThread]) {\
temp = x;\
} else {\
dispatch_semaphore_t signal = dispatch_semaphore_create(0);\
dispatch_async(dispatch_get_main_queue(), ^{\
temp = x;\
dispatch_semaphore_signal(signal);\
});\
dispatch_semaphore_wait(signal, DISPATCH_TIME_FOREVER);\
}\
temp;\
})
// ???: 在主线程中执行一段代码
#define kCodeSync(x) ({\
if ([NSThread isMainThread]) {\
x;\
} else {\
dispatch_semaphore_t signal = dispatch_semaphore_create(0);\
dispatch_async(dispatch_get_main_queue(), ^{\
x;\
dispatch_semaphore_signal(signal);\
});\
dispatch_semaphore_wait(signal, DISPATCH_TIME_FOREVER);\
}\
})
#endif /* TFSystemConfig_h */