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

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

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中一些类型的高级使用。

推荐阅读更多精彩内容

  • 为了运动给自己设定了一个离家几公里的地儿,还决定骑行往返。各种拖延终于到太阳雨的正午,还好似乎是半年来第一次没退缩...
    Rita318阅读 62评论 0赞 0
  • 图文/雨田 唐代大诗人岑参的“忽如一夜春风来,千树万树梨花开”,描写的是冬天的塞外风雪银装素裹的盛景,夹带着与友人...
    赶晚集的笨鸟阅读 109评论 1赞 4
  • 贝壳在潮水里面奔跑着,有一只螃蟹跑到我的脚上。 我捏住它的钳子,丢回了海里, 大家已经在这儿坐了一下午,直到拥挤的...
    崔罗石阅读 134评论 0赞 1
  • 《欢乐颂2》热播中,又被五美霸屏了呢。大家活着更多时候在于经历体验,三十岁前有大把的时间,无论感情...
    黎明时分的燕子阅读 196评论 0赞 3
  • 阁老师的Q版开课一周了,直播教程,团练一起有9个人物,我只画了7个,得加油(? ??_??)?!阁老师的Q版别具一...
    清歌浅笑阅读 212评论 11赞 22