#define

iOS开发技巧(系列十八:扩展UIColor,支持十六进制颜色设置)

僤鯓⒐⒋嵵緔 提交于 2020-02-28 13:54:33
新建一个Category,命名为UIColor+Hex,表示UIColor支持十六进制Hex颜色设置。 UIColor+Hex.h文件, #import <UIKit/UIKit.h> #define RGBA_COLOR(R, G, B, A) [UIColor colorWithRed:((R) / 255.0f) green:((G) / 255.0f) blue:((B) / 255.0f) alpha:A] #define RGB_COLOR(R, G, B) [UIColor colorWithRed:((R) / 255.0f) green:((G) / 255.0f) blue:((B) / 255.0f) alpha:1.0f] @interface UIColor (Hex) + (UIColor *)colorWithHexString:(NSString *)color; //从十六进制字符串获取颜色, //color:支持@“#123456”、 @“0X123456”、 @“123456”三种格式 + (UIColor *)colorWithHexString:(NSString *)color alpha:(CGFloat)alpha; @end 上面的代码在开头是两个宏定义,就是对[UIColor colorWithRed:green:blue

iOS深入学习:华丽的#define

别说谁变了你拦得住时间么 提交于 2019-12-03 16:41:51
我建了一个iOS开发QQ交流群:188647173,大家可以一起来相互学习。 还有一个群里面大神的个人站点 www.mylonly.com ,大家有不会的可以向他请教。 本片博客参考 CocoaChina 上面的文章,对内容进行了一定的删减,也加入了一点自己的理解,希望大家也贡献自己常用的#define,一起进步。 一般情况下,我们使用#define来定义一个常量,#define的本质是文本替换,例如#define INT_PTR int*,这时候我们使用INT_PTR, INT_PTR a,b; 这条语句等价于 int * a,b; 也就是定义了一个指针变量a和整型变量b,这是#define常用的场景和需要注意的细节地方。下面我收集并整理了常用的#define,以后也会不断地更新。 1、定义常量 定义常量的时候最好以小写字母k开头,让人见名知意, (1)导航栏高度:我们都知道iPhone竖屏时候导航栏的高度为44,这时候可以定义一个常量来表示该高度, #define kNaivgationBarHeight 44 (2)屏幕的宽高:屏幕的宽高就是iOS设备硬件的屏幕尺寸,跟ViewController的view不完全相同, #define kSCREEN_WIDTH [UIScreen mainScreen].bounds.size.width #define kSCREEN

iOS开发技巧(系列六-再谈#define和预编译指令)

可紊 提交于 2019-12-03 06:40:34
之前写过一篇博客, iOS深入学习:华丽的#define ,列出了一些常用的#define。 今天再总结一点#define和预处理指令的使用。 预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。 可见预处理过程先于编译器对源代码进行处理 。 预处理指令是以#开头的代码行,#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。正行语句构成了一条预处理指令,该指令酱紫啊编译器进行编译之前对源代码做某些转换,下面是一些常用的预处理指令, # 空指令,没有任何效果 #include 包含一个源代码文件 #define 定义宏 #undef 取消定义宏 #if 如果条件为真,则编译下面的代码 #elif 如果前面的#if不为真,则编译下面的代码 #endif 结束一个#if...#elif条件编译块 #ifdef 如果已经定义了某个宏,则编译下面的代码 #ifndef 如果没有定义某个宏,则编译下面的代码 #error 停止编译并显示错误信息 最近在看公司自己封装的sdk的时候,遇到了很多#ifdef和#ifndef,下面我就主要距离来说一说这个预处理指令的灵活使用。比如你现在通过代码创建了一个Button, UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; btn.frame

c++学习总结:define的小细节

耗尽温柔 提交于 2019-12-02 00:24:27
在iOS开发中,我们可以使用#ifdef或者#ifndef来进行一些判断,这在我之前的博客中已经有所说明。今天我无意中又发现了一个小细节,总结起来就是预编译判断的两种方式,特在此与大家分享。 (1)第一种方式使用#ifdef 我们可以这样使用#ifdef,如下代码所示, #define DebugEnable #ifdef Debug_Enable NSLog(@"Debug Enable"); #else NSLog(@"Debug Unable"); #endif 这时候如果我们定义了Debug_Enable宏,则编译上面的代码;反之编译下面的代码。 (2)第二种方式使用#if defined(...),如下代码所示 #if defined(__APPLE__) NSLog(@"Apple Platform"); #else if defined(__linux__) NSLog(@"linux Platform"); #endif 这段代码是在真机运行的时候,判断是在什么平台上面,比如__APPLE__表示在苹果的OS X或者iOS平台,而__linux__宏表示在linux平台。 有人会问为什么要写这些宏判断语句呢?我也是刚刚想通的,我公司的项目不仅在iOS平台,在linux平台也在同步开发,底层使用的框架在两个平台都能使用,但是两个平台的东西也并不完全一样

#pragma once #ifndef,#define,#endif

心不动则不痛 提交于 2019-11-30 20:26:48
#pragma once这是一个比较常用的C/C++杂注,只要在头文件的最开始加入这条杂注,就能够保证头文件只被编译一次。 #pragma once是编译器相关的,有的编译器支持,有的编译器不支持,具体情况请查看编译器API文档,不过现在大部分编译器都有这个杂注了。 #ifndef,#define,#endif是C/C++语言中的宏定义,通过宏定义避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式。 写法: 方式一: #ifndef _SOMEFILE_H_ #define _SOMEFILE_H_ .......... // 一些声明语句 #endif 方式二: #pragma once ... ... // 一些声明语句 比较: #ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心“撞车”,可能就会导致头文件明明存在,编译器却硬说找不到声明的状况。 #pragma once则由编译器提供保证:同一个文件不会被编译多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。带来的好处是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题