首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

iOS学习——#define、const、typedef区别

当程序开始运行时,编译器先将代码中MAX全部替换为100,然后再进行编译。由此可得,#define并不是在编译过程中进行,而是在预编译阶段进行。...关于typedef定义枚举官方API是这样说 /* NS_ENUM supports the use of one or two arguments....NSInteger类型来制定枚举类型,第二个参数是可选枚举类型别名,如果要定义别名,必须使用typedef进行定义,具体格式如下: typedef NS_ENUM(NSInteger, NSComparisonResult...double J=PI; //再进行宏替换,又一次分配内存 double j=Pi; //没有内存分配 const定义常量汇编角度来看,只是给出了对应内存地址,而不是象#define一样给出是立即数...typedef是类型替换,语句一种,结尾必须有; define写在方法/函数中则作用域地方开始有效,直至使用#undef(不写此指令则后面一直有效)。

78340

常量和枚举

只是代码段而已,大量用宏导致二进制文件变大 但#define可以使用类型定义,比如 #define MY_INT_CONSTANT ((int)123) const const定义常量汇编角度来看...如何选择 尽量选择使用const,因为编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间常量,没有了存储与读内存操作,使得它效率比宏定义要高。...相反,define占据更多内存空间,因为它只是文字替换,导致存在过多拷贝。当然这一点是对于一般类型常量来说。...使用 NS_ENUM定义枚举数据,其内容值都是互斥: typedef NS_ENUM(NSInteger, UITableViewCellStyle) { UITableViewCellStyleDefault...宏不仅定义枚举名称(UITableViewCellStyle),还定义类型(NSInteger),一般来说枚举类型是 NSInteger。

50420
您找到你想要的搜索结果了吗?
是的
没有找到

iOS UITableViewCell使用详解

,可以设置一个风格和标识符,风格枚举如下: typedef NS_ENUM(NSInteger, UITableViewCellStyle) {     UITableViewCellStyleDefault...cell将要显示时,会调用这个方法,这个方法最大用武之地是当你自定义cell上面有图片时,如果产生了重用,图片可能错乱(当图片来自异步下载时及其明显),这时我们可以重写这个方法把内容抹掉。...@property (nonatomic) UITableViewCellSelectionStyle   selectionStyle;   cell被选中时风格,枚举如下: typedef NS_ENUM...,枚举如下 typedef NS_ENUM(NSInteger, UITableViewCellEditingStyle) {     UITableViewCellEditingStyleNone,/...(cell最右侧显示视图) 枚举如下: typedef NS_ENUM(NSInteger, UITableViewCellAccessoryType) {     UITableViewCellAccessoryNone

1K20

熟悉OC--5:用枚举表示状态、选项、状态码

枚举只是一种常量命名方式 某种状态值可以使用枚举 typedef NS_ENUM(NSInteger,LoginState){ LoginStateSuccess, LoginStateFail..., }; 在定义选项时候,若这些选项可以彼此组合,各个选项之间可以通过按“按位或操作符”来组合,那么枚举值中可定义为2幂 typedef NS_ENUM(NSInteger, UIInterfaceOrientation...return UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight; } 在switch中使用枚举定义状态机...,最好不要用default,如果使用default,当枚举中添加一个值,编译器不会发出警告,但是switch中不加default,编译器会有警告提示信息 typedef NS_ENUM(NSInteger...多个选项可以同时存在,可以使用枚举类型,可以将各选项值定义为2幂,以便通过按位或操作将其组合 3.处理switch语句中不要带有default分支,这样加入新枚举值之后,编译器提示开发者 参考

13610

iOS原生地图开发指南 原

NS_ENUM(NSUInteger, MKMapType) {     MKMapTypeStandard = 0,//标准式行政地图(显示城市,街道等)     MKMapTypeSatellite...注意:MKCoordinateSpan显示范围是取决于大一边,比如如果我们这样写: MKCoordinateSpanMake(1.8, 360); 最后依然显示整个世界地图。...,当显示用户位置设置为YES,这个方法也设置了后,地图框架为我们直接集成了定位,地图上就会显示我们位置,模式枚举如下: typedef NS_ENUM(NSInteger, MKUserTrackingMode...,MKAnnotationViewDragState枚举如下: typedef NS_ENUM(NSUInteger, MKAnnotationViewDragState) {     MKAnnotationViewDragStateNone...备注:在iOS9中,地图类型枚举又添加了两种: typedef NS_ENUM(NSUInteger, MKMapType) {     MKMapTypeStandard = 0,//标准

1.1K30

MySQL数据类型与优化

2、整数类型有可选UNSIGNED属性,表示不允许负值,这大致可以使正数上限提高一倍。有符号和无符号类型使用相同存储空间,有相同性能,具体情况具体考虑。...但在MySQL4.1 以及更早版本只能使用"浮点运算"来实现DECIMAL计算,这样可能导致精度损失。...枚举列可以把一些不重复字符串存储成一个预定义集合。MySQL在存储枚举时非常紧凑,根据列表值数量压缩到一个或两个字节中。...绕过这种限制方式是按照需要顺序来定义枚举列,另外也可以在查询中使用FIELD()函数显式地指定排序顺序,但这会导致MySQL无法利用索引消除排序,如果定义时候就是按照字母顺序,就没有那么做必要了。...4、由于MySQL把每个枚举值都保存为整数,并且必须进行查找才能转换为字符串,所以枚举列有一些开销,通常枚举列都比较小,所以开销还可以控制,在特定情况下,把CHAR/VARCHAR列与枚举列进行关联可能直接比关联

1.5K10

编程规范之《招聘一个靠谱iOS》

优化部分 enum 建议使用 NS_ENUM 和 NS_OPTIONS 宏来定义枚举类型,参见官方 Adopting Modern Objective-C 一文: //定义一个枚举 typedef...age 属性类型:应避免使用基本类型,建议使用 Foundation 数据类型,对应关系如下: int -> NSInteger unsigned -> NSUInteger float -> CGFloat...(设计上来说,这时候也可以拆分成两个独立方法),它不应该用作阐明有多个参数,比如下面的: //错误,不要使用"and"来连接参数 (int)runModalForDirectory:(NSString...而快捷构造方法返回值,建议为 instancetype,为保持一致性,init 方法和快捷构造方法返回类型最好都用 instancetype。...这样做你属性更容易修改正确,并且更好阅读。这在《禅与Objective-C编程艺术 >》里有介绍。而且习惯上修改某个属性修饰符时,一般从属性名右向左搜索需要修动修饰符。

62670

iOS视频功能模块开发 原

; 播放器背景颜色 @property (nonatomic, readonly) MPMoviePlaybackState playbackState; 播放器的当前播放状态,枚举定义如下: typedef...,枚举定义如下: typedef NS_OPTIONS(NSUInteger, MPMovieLoadState) {     MPMovieLoadStateUnknown        = 0,//...,枚举定义如下: typedef NS_ENUM(NSInteger, MPMovieScalingMode) {     MPMovieScalingModeNone,       // 无缩放     ...,枚举如下: typedef NS_ENUM(NSInteger, MPMovieSourceType) {     MPMovieSourceTypeUnknown,//类型未知     MPMovieSourceTypeFile...,参数枚举如下,生成缩略图数据回调在后面的通知中详说: typedef NS_ENUM(NSInteger, MPMovieTimeOption) {     MPMovieTimeOptionNearestKeyFrame

1K70

C++11强类型枚举

1.传统枚举类型缺陷 枚举类型是C/C++中用户自定义构造类型,它是由用户定义若干枚举常量集合。枚举值对应整型数值,默认0开始。比如定义一个描述性别的枚举类型。...Vegetables{Cucumber,Tomato,Pepper}; //编译报Tomato重定义错误 其中水果和蔬菜两个枚举类型中包含同名Tomato枚举常量导致编译错误。...(2)由于枚举类型被设计为常量数值“别名”,所以枚举常量总是可以被隐式转换为整型,且用户无法为枚举常量定义类型。 (3)枚举常量占用存储空间以及符号性不确定。...C++标准规定C++枚举所基于“基础类型”是由编译器来具体实现,这会导致枚举类型成员基本类型存在不确定性问题,尤其是符号性问题,即。...可见不同编译器对枚举常量整型类型宽度和符号有着不同实现。GNU C++根据枚举数值类型使用不同宽度和符号整型,VC++则始终以有符号int来表示枚举常量。

3.2K20

iOS开发之EventKit框架应用

首先,Canlendar应用默认创建了几个类型日历,用户也可以根据需要创建自定义日历,如下图: ?...图中可以看出,重要数据管理类为EKEventStore,其他类都是用来描述对应数据,下面会一一介绍。...,定义如下: typedef NS_ENUM(NSUInteger, EKEntityType) { EKEntityTypeEvent, // 日历类型 EKEntityTypeReminder.../ 对未来事件也产生影响 }; 五、EKSource类详解       首先,EKSource描述了,例如某些日历是系统默认创建,用户没有权限进行修改或删除,某些日历是用户自定义创建,还有些可能来自云端...)entityType; @end EKSourceType枚举如下: typedef NS_ENUM(NSInteger, EKSourceType) { EKSourceTypeLocal,

3.9K51

iOS使用UIImagePickerController调用系统相机、相册与图库

: //判断是否支持某个数据提供类型 /* UIImagePickerControllerSourceType枚举定义如下: typedef NS_ENUM(NSInteger, UIImagePickerControllerSourceType.../* 返回值为如下枚举: typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraCaptureMode) { //照片模式 UIImagePickerControllerCameraCaptureModePhoto...,需要设置为系统定义文件类型字符串数组 默认为kUTTypeImage @property(nonatomic,copy) NSArray...枚举如下: /* typedef NS_ENUM(NSInteger, UIImagePickerControllerQualityType) { UIImagePickerControllerQualityTypeHigh...editingInfo:(nullable NSDictionary *)editingInfo NS_DEPRECATED_IOS(2_0, 3_0); //相机录像或者图库相册选择视频完成后触发回调方法

2.3K10

Python体系练手项目200例(附源代码),练完可显著提升python水平(鲲鹏编程–Python教育新物种)

' 2.十八 十进制转换为八进制: >>> oct(9) '0o11' 3 十十六 十进制转换为十六进制: >>> hex(15) '0xf' 4.字符串字节 字符串转换为字节类型...如果参数是字符串,那么它可能包含符号和小数点。如果超出普通整数表示范 围,一个长整数被返回。 >>> int('12',16) 18 11....值得注意,自定义实例都可哈希: list, dict, set 等可变对象都不可哈希(unhashable): 30.打开文件 返回文件对象 mode 取值表: 31.查看对象类型...38.父子关系鉴定 第二个参数可为元组: 39.所有对象之根 object 是所有类基类 40.一键查看对象所有方法 不带参数时返回当前范围内变量、方法和定义类型列表;带参数时返回参数...41.枚举对象 Python 枚举对象 迭代 TestIter 类: 43.创建 range 迭代器 range(stop) range(start, stop[,step]) 生成一个不可变序列迭代器

3.3K30

C++四种强制转换

当我们试图根据某个成员变量偏移位计算其在该对象内存空间位置时,就会需要将指针转换为整型进行计算。当计算出该变量位置后(整型),就需要将其转换为指针类型。 整型和枚举类型相互转换。...// 枚举向整型转换 int a3 = reinterpret_cast(pv); // 无类型指针整型 Temp* pTemp1 = reinterpret_cast<Temp...这个说明如上写法也不会导致编译期间出现问题——但是这并不意味着这样代码就是正确——父子指针转换可能导致运行期出错。这个问题我们会在之后讨论。我们先看下执行结果。 ?        ...它用于在存在继承关系类指针之间转换。可以派生类指针转为基类指针,也可以基类指针转为派生类指针。...a2 = dynamic_cast(pv); // 无符号指针整型 // Temp* pTemp1 = dynamic_cast(pv); // 无符号指针其他指针

2.2K30

C++类型转换几种情况

上面说是整形类型转换,如果是浮点数转换的话也会有两个问题: 1.将较大浮点型转换为较小浮点类型,精度降低(如果对精度不理解请看我C++第一篇),值可能超出目标类型取值范围,这种情况下值是不确定...6.如果一个操作数为有符号,另一个操作数是无符号,且无符号操作数级别比有符号操作数级别高,则将有符号操作数转换为符号操作数所属类型。...7.否则,如果有符号类型可以表示无符号类型所有可能取值,则将无符号操作数转换为符号操作数所属类型。 8.否则,将两个操作数都转换为符号类型符号版本。...整形提升: 如果bool,char、short,包括它们有符号或无符号变型,以及枚举类型,可以使用在需要int或者unsigned int表达式中。...传递参数时转换 如果函数参数类型定义为double类型,但是传入时int类型,这在C中会提示错误,但在C++中,C++自动帮我我们转换为函数原型中定义值,条件是两种都是算术类型

2.2K20

数据类型转换看这篇就够了

,String使用长度属性length来计算字符串长度 1.1 String转换为Number parseInt(string, 10) parseInt() 函数可解析一个字符串,位置 0...1.2 StringObject 通过JSON.parse来完成,该注意是JSON.parse遇到不可解析字符串时,抛出SyntaxError异常。 ?...不同点在于Null 表示为‘定义了但是值为空’,而Undefind 表示为'这里应该有一个值,但是还没有定义' 要注意是,如果我们用typeof来判断null类型判定为 Object 类型,...undefined无法转为数字,第一个调用返回NaN.第二个是null转为隐式转换为0所以是2 ,第三个是如果传入参数是undefined以默认值为准,所以是3 5.2 总结 不要对一个显式变量赋值...通过Object.protptype.toString.call()截取字符串[object...]中间字符串来区分类型,去掉前后符号,比如 "[object Array]"就提取了array来判断,之前写工具库有定义点我

4.4K20

听GPT 讲Rust源代码--compiler(37)

宏中语法引用。 语法引用是一个宏中特殊符号,例如x或y:ty。这些符号表示被引用代码片段,它们被称为“引用号”。在编译过程中,这些引用号需要被替换为具体代码,然后才能生成最终代码片段。...它还包含一些用于解析过程中状态信息,如输入流中位置和待解析token流。 MatcherLoc枚举类型:该枚举定义了匹配位置不同类型,如单个token、重复token、任意token等。...SymbolAlreadyDefined:定义符号已经被定义错误,在单态化过程中如果遇到重复定义一个符号情况,抛出此错误。...CouldntDumpMonoStats:定义了无法储单态化统计信息错误,在单态化过程中如果遇到无法储统计信息情况,抛出此错误。...验证属性是非常重要,因为属性中错误或无效配置可能导致编译错误或不正确行为。 该文件包含了一个名为 preprocess_attrs 函数,它是属性预处理入口点。

10910
领券