C/OC/Swift的数据类型没那么简单

96
CoderDancer
2017.08.10 11:14* 字数 535

数据类型决定了值如何存储到计算机内存中。在声明变量时也可指定它的数据类型。不同数据类型来存储不同的信息,所有变量都具有数据类型,以决定能够存储哪种数据。

C语言

C语言的基本数据类型有六种:

short、int、long、char、float、double 

除基本数据类型外,还有一些构造类型,比如:

数组array,结构体struct,枚举enum以及联合union

OC的数据类型

OC是C的超集,所以OC的基本数据类型和C完全相同。
当然,作为一个面向对象的高级语言,除了基本数据类型还定义了一些高级的数据类型。
比如在Foundation中,给一些数据定义了别名,对应的映射关系是:

NSInteger <---->  long
CGFloat   <---->  double
BOOL      <---->  bool

以上的数据类型不需要用指针,不需要手动释放,方法执行完成后会自动释放。

但在OC的Foundation框架中,还是封装了很多对象类型的属性。

NSNumber
NSString/NSMutableString
NSArray/NSMutableArray
NSSet/NSMutableSet
NSDictionary/NSMutableDictionary
注意:
对于这些面向对象的内存管理,是特别复杂的存在。在编译和运行的时候,都对其做了优化。
论证过程很复杂,大家可以去网上找相关资料。
只是告诉结论性的东西。
以上的所有可变类型均是以对象的形式保存在堆中,需要关注其引用计数。
对于不可变类型:
比如NSDictionary、NSArray以及NSValue实例,除了空字典和空字符串,其余实例都遵循对象的内存管理策略。
NSNumber类创建的对于普通数据类型的封装的实例,其内存管理同样做了优化,不遵循对象的内存管理策略。

swift的数据类型

swift作为新的语言,采纳了很多优秀的语言特性,完善了基本数据类型,同时推出了很多高级的数据类型。

基本数据类型:

1、Int/Float/Double/Bool/Character/String
    
2、Array/Dictionary/元组类型(Tuple)/可选类型(Optional)

对于整型,根据位数和有无符号做了很多区分

Int8、Int16、Int32、Int64
UInt8、UInt16、UInt32、UInt64

推荐使用Int/UInt类型,因为其长度和当前系统长度相同,

* 在32位系统平台上,Int和Uint的长度是32位
* 在64位系统平台上,Int和Uint的长度是64位

针对浮点型

double: 15位有效数字
float:  6位有效数字

没有明确的说明,浮点数默认就是Double类型

swift中的Bool数据类型,只有true和false两种状态,没有0和1的状态。

除此之外的有:

类类型Class
结构体类型struct
枚举类型enum

结构体类型和枚举类型进行了扩展,可以添加属性,定义方法等等。

文末

其实数据类型不局限于此,文中列举的主要是一些常见的数据类型。
此文除了作为简单介绍外,也希望大家格外关注OC中NSString类型的内存管理,swift中一些类型的高级使用。

iOS底层
Web note ad 1