2.详解OC中的各个数据类型

本文详细介绍了Objective-C中的数据类型,包括基本数据类型占用的空间、整数和小数的书写方式、字符和字符串常量、数据类型格式化说明符、BOOL和Boolean的区别、Class和id类型、nil与NULL的使用,以及选择器SEL的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OC中包含了C语言中的所有数据类型。

序号类型与描述
1数据类型:基本数据类型、指针数据类型
2基本数据类型:数值型(整数类型int、浮点型float、double)、字符型(char)、布尔型、空类型(void)
3指针数据类型:类(class)、id
4typedef:自定义类型
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 类型的作用:
  1. 配合对象或者类检查类或对象中是否有某个方法
  2. 配合类或对象来执行某个SEL方法
  3. 配合对象将SEL类型作为方法的形参

这里先简单介绍SEL,后面会详细的讲解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值