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使用宏定义函数和代码块 今天在开发过程中碰到一个问题:就是父类中要向外发送通知,然后子类中或者其他类中来接收它.当然一般是把它写到类方法中去,但是有个问题,就是如果调用的类不是它的子类,就不能直 ...
随机推荐
- 配置同时使用 Gitlab、Github、Gitee(码云) 共存的开发环境
首先确认已安装Git,可以通过 git –version 命令可以查看当前安装的版本. Mac OSX 中都已经安装了Git.但是,Git的版本未必是最新的. 可以通过命令 git clone htt ...
- 七、数据提取之JSON与JsonPATH
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交互的场景,比如网站前台与 ...
- 01-CSS3-justify-content: space-around; justify-content: space-between;
/* justify-content: space-around; 运用在父级元素上 第一个子元素距离左边的距离==最后一个子元素距离右边的距离 除第一个子元素和最后一个子元素外,第2个,第3个... ...
- 浏览器onbeforeunload
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- jenkins配置自动部署java程序
任务背景 该项目包含4个程序包:a.jar,b.jar,c.jar,d.jar,每次启动前需要修改程序中的配置文件(修改数据源配置),然后按照先后顺序启动. 任务目标 1.利用jenkins拉取代码, ...
- POJ2976Dropping tests(分数规划)
传送门 题目大意:n个二元组a[i],b[i],去掉k个,求sigma a[i]/ sigma b[i]的最大值 代码: #include<iostream> #include<cs ...
- Note | Ubuntu18.04安装与配置
目标: 在服务器上配置最新的Ubuntu稳定版本18.04 LTS.18.04比16.04好看很多,非常建议. 有3块硬盘:2块4TB机械硬盘,1块2TB固态硬盘.计划将固态硬盘作为主硬盘,其余两块机 ...
- Java连载1-概述&常用的dos命令
本想写完那两个再开始新的,然而客观条件不允许,之前从未接触过Java,从零开始吧!!! 一.概述 C盘下:programme file 一般为64位程序安装的目录,programme file(X ...
- telnet: Unable to connect to remote host: Connection refused
问题描述: telnet: Unable to connect to remote host: Connection refused 已解决,需要安装telent 服务,请查看下方的链接文章: htt ...
- 十、Spring之BeanFactory源码分析(二)
Spring之BeanFactory源码分析(二) 前言 在前面我们简单的分析了BeanFactory的结构,ListableBeanFactory,HierarchicalBeanFactory,A ...