OC中包含了C语言中的所有数据类型。
序号 | 类型与描述 |
---|---|
1 | 数据类型:基本数据类型、指针数据类型 |
2 | 基本数据类型:数值型(整数类型int、浮点型float、double)、字符型(char)、布尔型、空类型(void) |
3 | 指针数据类型:类(class)、id |
4 | typedef:自定义类型 |
5 | 构造类型:数组,结构体,枚举 |
常用基本数据类型占用空间(64位机器为例)
char : 1个字节
int :4个字节
float:4个字节
double:8个字节
基本类型书写
整数
a.默认为10进制 ,10 ,20。
b.以0开头为8进制,045,021。
c.以0b开头为2进制,0b11101101。
d.以0x开头为16进制,0x21458adf。
小数
单精度常量:2.3f 。
双精度常量:2.3,默认为双精度。
字符型常量
用英文单引号括起来,只保存一个字符’a’、‘b’ 、’*’ ,还有转义字符 ‘\n’ 、’\t’。
字符串常量
用英文的双引号引起来 可以保存多个字符:“abc”。
数据类型格式化说明符
数据类型 | oc关键字 | 格式说明引导符 |
---|---|---|
整型 | int | %d.%i |
短整型 | short int | %hd.%hi |
长类型 | long int | %ld.%li |
无符号短整型 | unsigned int | %u |
无短整型 | unsigned short | %hu |
无符号长整型 | unsigned long | %lu |
浮点型 | float | %f |
双精度型 | double | %f |
长双精度型 | long double | %lf |
字符型 | char | %c |
字符串(OC中才有的) | NSString | %@ |
id类型(OC中独有的) | id p = [Person new]; | %p |
C语言的字符串和OC字符串
1).C语言的字符串的存储方式
a.使用字符数组存储
b.使用字符指针
2).OC中设计了一个更为好用的用来存储字符串的1个类型。
NSString 类型的指针变量 专门用来存储OC字符串的地址
NSString *str2 = @"1234";//这里定义了一个OC中的字符串
3).OC字符串常量必须要使用一个前缀@符号
"Jack" 这里是一个C语言的字符串
@"Jack" 这里是一个OC语言的字符串
NSString 类型的指针变量只能存储OC字符串的地址
BOOL类型
- 可以存储YES和NO的任意一个数据
- 一般情况下BOOL类型的变量用来存储条件表达式的结果,如果条件表达式成立,那么结果就是YES,如果条件表达式不成立,那么结果就为NO
BOOL的本质
源码:
typedef singed char BOOL;
实际上BOOL类型的变量是一个有符号的char变量。
#define YES ((BOOL)1);
#define NO ((BOOL)0);
Boolean类型
- 可以存储true和false的任意一个数据
- 一般情况下Boolean类型的变量用来存储条件表达式的结果,如果条件表达式成立,那么结果就是true,如果条件表达式不成立,那么结果就为false
Boolean的本质
源码:
typedef unsinged char Boolean;
实际上BOOL类型的变量是一个有符号的char变量。
#define true 1;
#define false 0;
Class类型 类
会在后面单独提到
id类型 万能指针
id类型是oc中独有的数据类型,它可以存储任何类型的对象,也叫万能指针,能指向任何OC对象,相当于NSObject*。
id类型的定义;
typedef struct objc_object {
Class isa;//isa是每个对象自带的一个指针,指向类的方法,后面应该会提到,在oc的存储中,对象只有属性,没有方法,调用方法都是通过isa指针去调用类的方法,以便于节省空间
} *id;
使用
// 注意:id后面不要加上*
id p = [Person new];
nil和NULL
1. NULL
只能作为指针变量的值。如果1个指针变量的值是NULL值代表,代表这个指针不指向内存 中的任何1块空间
NULL其实等价于0 , NULL其实是1个宏。 就是0
2. nil
只能作为指针变量的值。代表这个指针变量不指向内存中的任何空间。
nil其实也等价于0,也是1个宏,就是0.
所以,NULL和nil其实是一样的.
3.使用建议。
虽然使用NULL的地方可以是nil,使用nil的地方可以使用NULL但是不建议大家去随便使用。
C指针用NULL
int *p1 = NULL; //p1指针不指向内存中的任何1块空间。
OC的类指针用nil
Person *pl = nil;// p1指针不指向任何对象。
4. 如果1个类指针的值为nil代表这个指针不指向任何对象。
Person *p1=nil;
- 那么这个时候如果通过p1指针去访问p1指针指向的对象的属性,这个时候会运行报错。
- 那么这个时候,如果通过p1指针去调用对象的方法运行不会报错,但是方法不会执行没有任何反应
选择器SEL(@selector)
SEL:类成员方法的指针,但不同于C语言中的函数指针,函数指针直接保存了方法的地址,但SEL只是方法编号。
SEL 类型的作用:
- 配合对象或者类检查类或对象中是否有某个方法
- 配合类或对象来执行某个SEL方法
- 配合对象将SEL类型作为方法的形参
这里先简单介绍SEL,后面会详细的讲解。