iOS - 常用宏定义和PCH文件知识点整理
(一)PCH文件操作步骤演示:
第一步:图文所示:
第二步:图文所示:

(二)常用宏定义整理:
(1)常用Log日志宏(输出日志详细可定位某个类、某个函数、某一行)
//============================================================NSLog
#ifdef DEBUG
#define DDLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#define BASE_URL @""
#else
#define DDLog(...)
#define BASE_URL @""
#endif #ifdef DEBUG
#define DDString [NSString stringWithFormat:@"%s", __FILE__].lastPathComponent
#define DDLog(...) printf("%s: %s [%d]: %s\n\n",[[NSString dh_stringDate] UTF8String], [DDString UTF8String] ,__LINE__, [[NSString stringWithFormat:__VA_ARGS__] UTF8String]);
#define BASE_URL @""
#else
#define DDLog(...)
#define BASE_URL @""
#endif
//============================================================(第二个比较详细适应于真机模拟器)
#pragma mark - 其中第二个宏定义中会用到(NSString分类文件,该文件如下)
// NSString+DHExtension.h 文件中
#import <Foundation/Foundation.h> @interface NSString (DHExtension)
/**
Log日志会用到 @return NSString
*/
+ (NSString *)dh_stringDate;
@end // NSString+DHExtension.m 文件中
#import "NSString+DHExtension.h" @implementation NSString (DHExtension)
#pragma mark - Log日志会用到
+ (NSString *)dh_stringDate {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY-MM-dd hh:mm:ss"];
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
return dateString;
}
@end
(2)常用屏幕适配宏(方法有很多可以灵活运用)
//============================================================UIScreen/iPhone机型判断
// 屏幕宽
#define DDScreenW [UIScreen mainScreen].bounds.size.width
// 屏幕高
#define DDScreenH [UIScreen mainScreen].bounds.size.height // 用户机型判断宏
#define DDCurrentModeSize [[UIScreen mainScreen] currentMode].size
// 判断是否是iPad
#define DDiPad ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
// 判断iPhone4系列
#define DDiPhone4 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), DDCurrentModeSize) && !DDiPad : NO)
// 判断iPhone5系列
#define DDiPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), DDCurrentModeSize) && !DDiPad : NO)
// 判断iPhone6系列(包含iPhone6/iPhone7/iPhone8)
#define DDiPhone6 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), DDCurrentModeSize) && !DDiPad : NO)
// 判断iphone6P系列(包含iPhone6P/iPhone7P/iPhone8P)
#define DDiPhoneP ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), DDCurrentModeSize) && !DDiPad : NO)
// 判断iPhoneX
#define DDiPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), DDCurrentModeSize) && !DDiPad : NO)
// 判断iPHoneXr
#define DDiPhoneXr ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(828, 1792), DDCurrentModeSize) && !DDiPad : NO)
// 判断iPhoneXs
#define DDiPhoneXs ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), DDCurrentModeSize) && !DDiPad : NO)
// 判断iPhoneXs Max
#define DDiPhoneXsMax ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2688), DDCurrentModeSize) && !DDiPad : NO) // 顶部NavBar高度
#define DDNavBarH ((DDiPhoneX==YES || DDiPhoneXr==YES || DDiPhoneXs==YES || DDiPhoneXsMax==YES) ? 88.0 : 64.0)
// 底部TabBar高度
#define DDTabBarH ((DDiPhoneX==YES || DDiPhoneXr==YES || DDiPhoneXs==YES || DDiPhoneXsMax==YES) ? 83.0 : 49.0)
// 顶部StatusBar高度
#define DDStatusBarH ((DDiPhoneX==YES || DDiPhoneXr==YES || DDiPhoneXs==YES || DDiPhoneXsMax==YES) ? 44.0 : 20.0)
// 判断是不是刘海屏(iPhoneX系列)
#define DDiPhoneNewX ((DDNavBarH==88.0 || DDiPhoneXr==83.0 || DDStatusBarH==44.0) ? YES : NO)
// 底部安全区域高度
#define DDTabbarSafeH (DDiPhoneNew ? 34.f : 0.f)
// 顶部适配系统方法
#define STATUS_BAR_FRAME [[UIApplication sharedApplication] statusBarFrame]
// iPhoneX系列判断(包含iPhone X/iPhone XS/iPhone XS Max/iPhone XR)
#define DDIS_iPhoneX (CGSizeEqualToSize(CGSizeMake(375.f, 812.f), [UIScreen mainScreen].bounds.size) || CGSizeEqualToSize(CGSizeMake(812.f, 375.f), [UIScreen mainScreen].bounds.size) || CGSizeEqualToSize(CGSizeMake(414.f, 896.f), [UIScreen mainScreen].bounds.size) || CGSizeEqualToSize(CGSizeMake(896.f, 414.f), [UIScreen mainScreen].bounds.size))
//============================================================UIScreen/iPhone机型判断(方法有很多种灵活运用)
(3)其他宏运用补充:
//============================================================RGB
#define DDRGBColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0]
#define DDBackGroundRGB DDRGBColor(236, 236, 236)
#define UIColorFromHex(s) [UIColor colorWithRed:(((s & 0xFF0000) >> 16))/255.0green:(((s &0xFF00) >>8))/255.0blue:((s &0xFF))/255.0alpha:1.0] //============================================================默认图片
#define DDPlaceImage [UIImage imageNamed:@"imageName.png"] //============================================================SELF
#define WeakSelf(weakSelf) __weak __typeof(self) weakSelf = self;
(三)后续常用宏定义会慢慢补充;
iOS - 常用宏定义和PCH文件知识点整理的更多相关文章
- iOS常用宏定义--实用
在这里给大家分享一些常用的宏定义,喜欢的小伙伴可以直接在项目中使用(持续更新)!为了大家使用方便,请点击GitHub - 宏定义头文件下载 ! 1.获取屏幕宽度与高度 #define SCREEN_W ...
- iOS常用宏 定义
总结了iOS开发过程中的一些常用宏,以后会陆陆续续添加进来. 字符串是否为空 1 #define kStringIsEmpty(str) ([str isKindOfClass:[NSNull c ...
- iOS常用宏定义大全
宏定义与常量的区别 宏:只是在预处理器里进行文本替换,不做任何类型检查,宏能定义代码,const不能,多个宏编译时间相对较长,影响开发效率,调试过慢,const只会编译一次,缩短编译时间. 所以在使用 ...
- iOS常用宏定义
转发:https://www.douban.com/note/486674206/ #ifndef MacroDefinition_h#define MacroDefinition_h //----- ...
- (转)iOS 常用宏定义
#ifndef MacroDefinition_h #define MacroDefinition_h //-------------------获取设备大小------------------- ...
- IOS - 常用宏定义和功能方法
可能不定期添加新的东西 github地址:https://github.com/yuqingzhude/CommonUseDemo /************************Tools**** ...
- IOS 程序员开发最常用宏定义
网上对IOS的宏定义比较多,我总结了一些最常用的宏,后续还会继续补上. 1.首次启动判断: #define First_Launched @"firstLaunch" 2.ios7 ...
- ios 常用宏(copy)
分享一下我现在用的 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 3 ...
- iOS 使用宏定义函数和代码块
iOS使用宏定义函数和代码块 今天在开发过程中碰到一个问题:就是父类中要向外发送通知,然后子类中或者其他类中来接收它.当然一般是把它写到类方法中去,但是有个问题,就是如果调用的类不是它的子类,就不能直 ...
随机推荐
- Mybatis书写
Mybatis设置主键和自增 方法1: <insert id="insert" parameterType="Person" useGeneratedKe ...
- REST API接口测试
背景介绍 为什么要做借口测试? 很多系统关联都是基于接口来实现的,接口测试可以将复杂的系统关联进行简化. 接口功能比较单一,能够比较好的进行测试覆盖,也相对容易实现自动化持续集成. 接口相当于界面功能 ...
- Python—系统模块(os和sys)
os模块 https://www.cnblogs.com/feifeifeisir/p/9519282.html sys模块 获取Python版本信息 import sys a = sys.versi ...
- appium---uiautomator定位方法
前面总结了7种定位方法,今天在介绍一种uiautomator方法,其实appium就是基于uiautomator框架实现的,让我们一起看下uiautomator有哪些定位方法可以使用 uiautoma ...
- C++ STL bitset 容器详解
C++ STL bitset 容器详解 本篇随笔讲解\(C++STL\)中\(bitset\)容器的用法及常见使用技巧. \(bitset\)容器概论 \(bitset\)容器其实就是个\(01\)串 ...
- pointNet代码
介绍 组成 1.PointNet classification network分类网络 part segmentation network 数据集 1.point clouds sampled fro ...
- 快速获取 IP 地址
IP 地址可以分为两类,公用和私有(专用).公用 IP 是唯一的 IP 地址,可以从 Internet 访问.专用 IP 地址保留供您专用网络内部使用,而不会直接暴露给 Internet. 本文将介绍 ...
- 机器学习之KNN
KNN做回归和分类的主要区别在于最后做预测时候的决策方式不同.KNN做分类预测时,一般是选择多数表决法,即训练集里和预测的样本特征最近的K个样本,预测为里面有最多类别数的类别.而KNN做回归时,一般是 ...
- [转]python 中的[:-1]和[::-1]
转自:https://blog.csdn.net/mingyuli/article/details/81604795 1.案例解释a='python'b=a[::-1]print(b) #nohtyp ...
- Python连载33-共享变量加锁、释放
一.共享变量 共享变量:当多个线程访问同一个变量的时候.会产生共享变量的问题. 例子: import threading sum = 0 loopSum = 1000000 def myAdd(): ...