Objective-C之数据类型

一概述:

    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,那么它返回的是未知类型的对象。


猜你喜欢

转载自blog.csdn.net/Null959_/article/details/80908085
今日推荐