一概述:
Objective-C是在C语言基础上拓展出的新语言,所以它是能兼容C语言代码的,C语言中的基本数据类型如int、float、double和char在Objective-C中是完全可以正常使用的。除此之外,Objective-C还拓展了一些新的数据类型如BOOL、id、instancetype等。
二.新特性的介绍:
1.BOOL类型介绍:
1.打开Xcode,创建一个Objcetivie-C项目.
2.导入,查看官方文档:
#include <objc/objc.h>
所以说,在 iOS 的64位系统或者在Apple Watch 上,Objective-C 的 BOOL 直接等于定义在 stdbool.h 文件里头的 bool,bool其实是 int,假如使用了C++,那么 stdbool.h文件里面的定义就变成了C++的 bool。
但是,如果是在 MacOS(我们现在开发都在这) 或者 32位系统的 iOS ,BOOL会被定义成一个 signed char,
而 BOOL 与 bool,就分别是一个 byte 或者是 四个 bytes 的差别。
官方文档:
Objective-C中的BOOL实际上是:
一种对带符号的字符类型(signed char)的类型定义(typedef),它使用8位的存储空间。
通过#define指令把YES定义为1,NO定义为0.
例如,给一个BOOL类型的变量赋值为23是可以编译成功的,编译器在处理过程中会将该变量认定为真,因为BOOL类型逻辑上来说是非零即为真。
注意:
1.只有 a =1 的时候,才是YES,要是其他值(0除外)为NO。慎用 a==YES 这种方式!
2.上面说过,bool实际类型是:_Bool(int) ,表达方式 true和false,判读也行
3.Boolean, 实际类型:unsigned char,表达方式TRUE和FALSE,注意方式跟BOOL一样
详情可以查看这篇
2.id类型:
id数据类型可存储任何类型的对象。
从某种意义上说,它是通用对象类型,这和C语言中的void *很相似。
如果要用基本类型代替,需要对基本数据类型进行封装。
id是一个指向任意一个继承了NSObject类的对象。
需要注意的是,id是一个指针,所以在使用id的时候不需要加星号。
例如:
id anobject = nil;
id类型是Objective-C中经常使用的一种重要数据类型,它是Objective-C动态绑定的基础。
例子:下方的代码中,在一个数组中存储了若干个对象,有NSNumber和NSString型的,当用户无法准确获取对象的类型时,可以使用id这种通用的对象类型:
3.instancetype类型
在类方法中,例如,以alloc、new开头的方法,以及实例方法中autorelease、init、retain等方法的返回值类型就是instancetype类型,这些就称为关联返回类型的方法。这些方法的返回值是一个以方法所在的类为类型的对象。例如,在NSObject类的alloc和init方法,调用后会返回一个NSObject类型的对象。
+(instancetype)alloc;
-(instancetype)init;
使用instancetype作为方法返回值的好处是可以确定对象类型,以便帮助编译器更好地定位代码问题。
4.id和instancetype的异同:
不同:1.id可以作为方法或函数的参数类型,也可以单独使用这种类型定义的变量,而instancetyoe不行.
2.如果方法的返回值类型是instancetype,那么它返回的一定是这个类型的对象;如果方法的返回值类型是id,那么它返回的是未知类型的对象。