-
Notifications
You must be signed in to change notification settings - Fork 0
Objc DataStructure
我们将从“数据结构”和“数据类型”两个角度来分析
Q: 什么是数据结构呢?
A: 数据结构是以某种特定的布局方式存储数据的容器。这种“布局方式”决定了数据结构对于某些操作是高效的,而对于其他操作则是低效的。
数据结构通常分为以下八大类:
- 数组 - Array
- 堆 - Heap
- 栈 - Stack
- 队列 - Queue
- 链表 - Linked List
- 图 - Graph
- 散列表 - Hash哈希表
- 树 - Tree 字典树:这是一种高效的树形结构,但值得单独说明
Objective-C这门语言是C语言的严格超集,我们先来看看C里面有哪些数据类型。
- 基本数据类型
- 构造类型
- 指针类型
- 空类型
基本数据类型(fundamental data types)也叫原始数据类型(primitive data types)。包括: 整型、字符型、浮点型、枚举型, 其中枚举型在计算机内部以 int 类型存储。详见下表。
| 数据类型 | 16位编译器 | 32位编译器 | 64位编译器 |
|---|---|---|---|
| char | 1byte | 1byte | 1byte |
| int | 2byte | 4byte | 4byte |
| float | 4byte | 4byte | 4byte |
| double | 8byte | 8byte | 8byte |
| short int | 2byte | 2byte | 2byte |
| unsigned int | 2byte | 4byte | 4byte |
| long | 4byte | 4byte | 8byte |
| unsigned long | 4byte | 4byte | 8byte |
| long long | 8byte | 8byte | 8byte |
构造类型包括: 数组类型, 结构体类型(struct), 共用/联合体类型(union)。其中union一般在对单片机等内存比较小的设备进行编程时才使用。
data_type *pointer_name
由于指针在实质上是一个内存地址,内存地址的长度跟CPU的寻址有关(与data_type无关), 所以在32位系统上, 指针占据4个字节;在64位系统上,指针占据8个字节.
空类型一般用于函数的返回值,表示不需要返回任何类型。由于void类型只是一个抽象概念,并不会存在于内存中,自然就没有字节占用。
前面提到过,Objective-C是C语言的严格超集,因为以上的数据类型也是OC的数据类型.相比于C, OC是一门面向对象语言, 如同C++一样支持用户定义类型Class。用户定义类型为Cocoa框架的诞生提供了可能。
OC数据类型, 实际上指的是C数据类型加上Cocoa框架集合(Foundation、UIKit等)中定义的的数据类型,也即Cocoa类(泛指所有基于Objective-C运行时且派生自根类NSObject的类)。
Foundation框架中定义的NSObject类是iOS中最重要的数据类型,用户定义的类都需要继承自它从而获得调用iOS系统资源的能力。Foundation中还有一个重要的集合(Collection)概念,其包含了NSArray、NSSet、NSDictionarry以及各自的可变类型;此外,还有NSString、NSMutabString、NSNumber等重要的类型。以上提及的类型均继承自NSObject,是用户定义类型(class)而并非构造类型(struct),它们在被赋值或者被传入函数或者方法时,不会发生值拷贝,而是传递现有实例的引用。
OC数据类型 = C数据类型 + Cocoa类型
- OC数据类型
- C数据类型
- 基本数据类型
- 整型
- 字符型
- 浮点型
- 枚举型
- 构造类型
- 指针类型
- 空类型
- 基本数据类型
- Cocoa类型
- C基本数据类型-变名
- CGFloat
- NSInteger
- NSUInteger
- BOOL
- NSObject
- Collection
- NSArray
- NSMutableArray
- NSSet
- NSMutableSet
- NSDictionary
- NSMutableDictionary
- NSString
- NSMutableString
- NSNumber
- Collection
- C基本数据类型-变名
- C数据类型
注:由于在OC中BOOL实际上是signed char类型的重命名,NSInteger等也大同小异,因而并没有将它们归为新的类型。
从可以知道OC中Class与NSObject都是基于Struct, 接下来我们将指针类型及构造类型中的结构体类型Struct挑出来重点分析
指针 函数指针 指针函数
struct是oc的基础 结构体初始化后不能在定义
既然是类,我们就可以实例化一个对象 NSString *s = [NSString new]; 1)分配空间 2)初始化 3)返回地址
iOS 数据结构总结
iOS-数据结构
iOS有哪些数据类型/基本数据类型?
C语言和OC的结构体(struct)
iOS中编写高效能结构体的7个要点
OC底层原理之《内存对齐原则》
iOS_NSSet与NSArray的区别
iOSNSSet 和 NSArray的区别