Object-C是在C语言基础上拓展出的新语言,所以它是完全兼容C语言代码的,除了C中基本数据类型,如:int、float等,Object-C中还拓展了新的数据类型如BOOL、id、instancetype等。
整数常量由一个或多个数字的序列组成,序列前的负号表示该值是一个负值,数字中间不允许插入空格或逗号。 一个int类型的值取值范围在不同设备中是不同的。在32位系统中,一个int占4字节;在64位系统中,占8字节,所以在64位系统中,int的取值范围大于32位系统的。在开发过程中,格式化输出,可以使用%d或%i。 示例:
int num = 10 ; NSLog(@"%d", num);float类型是可以存储包含小数位的数值,格式化输出时可以使用%f 或者%g 。另外,%.2f 表示保留两位小数,其他以此类推。
float f = 10.1234; NSLog(@"f, %.2f", f, f);char类型可以存储单个字符,将字符放入一对单引号中就可以得到一个字符常量。格式化输出用%c 。
char c = 'a'; NSLog(@"%c", c);BOOL类型其实是一种称为预处理程序的机制添加的。Object-C中的BOOL通过#define指令把YES定义为1,NO定义为0。例如,给一个BOOL类型的变量赋值为23是可以编译成功的,编译器在处理过程中会将该变量认定为真,因为BOOL类型逻辑上来说是非零即真。 BOOL类型的本质:
typedef signed char BOOL;BOOL类型的变量取值:
#define YES (BOOL)1; #define NO (BOOL)0;Object-C中,在变量的声明过程中,还可以加上一些限定词。常见的限定词主要有:long、long long、short、unsigned、signed。
id数据类型可以存储任何类型的对象。从某种意义上说,它是通用对象类型,这和C语言中的void* 很相似。如果要用基本类型代替, 需要对基本数据类型进行封装。 id是一个指向任意一个继承了NSObject类的对象。 需要注意的是,id是一个指针,所以在使用id时候不需要加*号。例如:
NSArray *array = @[@123, @"ios"]; id obj = array[1]; NSLog(@"%@", obj);id类型是Object-C中常使用的一种重要数据类型,它是Object-C动态绑定的基础。
在类方法中,例如以alloc、new开头的方法,以及实例方法中autorelease、init、retain等方法返回值类型就是instancetype类型,这些就称为关联返回类型的方法。这些方法的返回值是一个以方法所在的类位类型的对象。例如,在NSObject类的alloc和init方法,调用后会返回一个NSObject类型的对象。 使用instancetype作为方法返回值的好处是可以确定对象类型,以便帮助编译器更好地定位代码问题。
id和instancetype的相同点在于都可以作为方法的返回值类型。而两者的不同点体现在:
id可以作为方法或函数的参数的类型,也可以单独用这种类型定义变量,但是instancetype不行。如果方法的返回值是instancetype,那么它返回的一定是这个类型的对象;如果返回值类型是id,那么它返回的是未知类型的对象。这个在C语言基础都有,只介绍在Object-C中,常用的是+、/、-、*、%、自增、自减。
类型转换的一般形式位"(类型说明符)(表达式)",示例:(float)a //把变量a转化为float型。
Object-C允许开发者为已经定义过的数据类型指派一个别名,这就需要使用typedef语句。