OC的数据类型

969 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

OC的数据类型可以分为基本数据类型、构造类型和指针类型。

1. 基本数据类型

  • C语言基本数据类型(如short、int、float等)在OC中都不是对象,只是一定字节的内存空间用于存储数值,他们都不具备对象的特性,没有属性方法可以被调用。
  • OC中的基本数据类型:
    • NSInteger(相当于long型整数)、
    • NSUInteger(相当于unsigned long型整数)、
    • CGFloat(在64位系统相当于double,32位系统相当于float)等
    • 他们并不是类,只是用typedef对基本数据类型进行了重定义,他们依然只是基本数据类型。
    • 枚举类型:其本质是无符号整数。
    • BOOL类型:是宏定义,OC底层是使用signed char来比啊是BOOL。

2. 指针数据类型

指针数据类型包括:类classid

  • 类class:NSStringNSSetNSArrayNSMutableArrayNSDictionaryNSMutableDictionaryNSValueNSNumber(继承NSValue)等,都是class,创建后便是对象,继承NSObject。 OC中提供了NSValueNSNumber来封装C语言的基本数据类型,这样我们就可以让他们具有面向对象的特性了。
  • id:id是指向Objective-C对象的指针,等价于C语言中的void*,可以映射任何对象指针指向它,或者映射他指向其他的对象。常见的id类型就是类的delegate属性。 集合NSSet和数组NSArray区别:
  • 都是存储不同的对象的地址;
  • NSArray是有序的集合,NSSet是无序的集合,他们俩可以互相转换。
  • NSSet会自动删除重复元素。
  • 集合是一种哈希表,运用散列算法,查找集合中的元素比数组速度更快,但是它没有顺序。

3. 构造类型

构造类型包括:结构体、联合体

  • 结构体(struct)中所有变量是“共存”的,同一时刻每个成员都有值,其sizeof为所有成员的和。
    • 优点:是“有容乃大”,全面;
    • 缺点:是struct内存空间的分配是粗放的,不管用不用,全分配,会造成内存浪费。
  • 联合体(union)中各变量是“互斥”的,同一时刻只有一个成员变量有值,其sizeof为最长成员的sizeof。
    • 优点:是内存使用更为精细灵活,也节省了内存空间。
    • 缺点:就是不够“包容”,修改其中一个成员时会覆盖原来的成员值。