iOS 数据类型

一、基本数据类型

基本数据类型图

注:OC没有自己的基本类型,只是对C的类型做了映射,在32位的情况下相当于int,大小4字节,在64位上相当于long,大小8字节;CGFloat同理,在32位上相当于float,大小4字节,在64位上相当于double,大小8字节;对于BOOL类型有点特殊,0为false,非0为true,大小占4字节。

二、OC 结构体类型 

CGRect、CGSize、CGPoint

用来描述视图位置主要用于UI&动画实现,可与NSValue进行转换

二、 对象数据类型

 id、NSObject、NSSet、NSArray、NSDictionary、NSString、NSNumber、NSValue

(1)id与NSObject

          id是一种通用的对象类型,可以且仅可以存储对象类型,动态数据类型,运行时决定,编译时不做检查,不需要强制类型转换

          NSObject也指向任何对象类型,静态数据类型,编译时会做检查,所以需要强制类型转换

(2)id与instancetype

          id可以定义变量,声明函数参数与返回值类型,instancetype一般作为初始化函数返回类型,编译时期会做函数返回值类型校验,警告提示

(3)NSString

        NSString内部封装了三种类型  __NSCFConstantString      __NSCFString        NSTaggedPointerString

        __NSCFConstantString 常量字符串,不可变,分配在常量区,相同字符串常量公用一个,可通过 == 或者字符串方式比较,不遵循引用计数内存管理机制,引用计数 -1,非对象

        __NSCFString 字符串变量,分配在堆区,遵循引用计数内存管理机制,对象

    NSTaggedPointerString 对于长度较小无中文汉字的字符串,苹果采用的内存优化方式,不遵循引用计数内存管理机制,引用计数 -1,非对象,存储在栈区

(4)NSMutableDictionary

        底部实现原理是一个哈希表,对键名key做哈希运算生成一个不小于零的数字,用该结果数字对实际存储元素个数取余,存储在当前的index,由于key字符串数量繁多,而数组大小有限,就会造成计算出来的取余结果一样,出现哈希冲突。

        哈希冲突容易出现存在两点原因,负载因子(总数据个数与可存储元素个数比值)过大,或者哈希函数存在问题。

        解决的方法有 拉链法、开发定址法、再哈希法、公共溢出区等,目前苹果为了查找时间复杂度为O(1),采用的是开放定址法。

(5)NSMutableArray

        实现原理是一个基本数组,维数组增加了起始地址、偏移地址、当前数组大小和实际存储元素个数等信息



        

你可能感兴趣的:(iOS 数据类型)