Skip to content

Objc DataStructure

Deepin edited this page Sep 1, 2021 · 34 revisions

我们将从“数据结构”和“数据类型”两个角度来分析

一、数据结构

Q: 什么是数据结构呢?
A: 数据结构是以某种特定的布局方式存储数据的容器。这种“布局方式”决定了数据结构对于某些操作是高效的,而对于其他操作则是低效的。

数据结构通常分为以下八大类:

  1. 数组 - Array
  2. - Heap
  3. - Stack
  4. 队列 - Queue
  5. 链表 - Linked List
  6. - Graph
  7. 散列表 - Hash哈希表
  8. - Tree 字典树:这是一种高效的树形结构,但值得单独说明

二、数据类型

Objective-C这门语言是C语言的严格超集,我们先来看看C里面有哪些数据类型。

C数据类型

  • 基本数据类型
  • 构造类型
  • 指针类型
  • 空类型

1. 基本数据类型

基本数据类型(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

2. 构造类型

构造类型包括: 数组类型, 结构体类型(struct), 共用/联合体类型(union)。其中union一般在对单片机等内存比较小的设备进行编程时才使用。

3. 指针类型

data_type *pointer_name

由于指针在实质上是一个内存地址,内存地址的长度跟CPU的寻址有关(与data_type无关), 所以在32位系统上, 指针占据4个字节;在64位系统上,指针占据8个字节.

4. 空类型

空类型一般用于函数的返回值,表示不需要返回任何类型。由于void类型只是一个抽象概念,并不会存在于内存中,自然就没有字节占用。

OC数据类型

前面提到过,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

注:由于在OC中BOOL实际上是signed char类型的重命名,NSInteger等也大同小异,因而并没有将它们归为新的类型。

从可以知道OC中ClassNSObject都是基于Struct, 接下来我们将指针类型构造类型中的结构体类型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的区别

Clone this wiki locally