Objective-C基础——程序的整体语法结构(01)

xiaoxiao2021-03-01  64

在学习了C和C++的相关知识后,我们就可以进入到ObjC的世界了,关于ObjC的由来的历史我们就不再进行追溯了,互联网上有大量的相关介绍,我们学习ObjC的目的就是进行IOS开发,因此首先,我们应该了解它的基本语法结构,有很多的语法知识我们在C中都是接触过的,因此我们开始介绍ObjC的时候就不在进行阐述了,有不明白的地方可以查阅相关网站或者文本资料。好了,我们开始ObjC的基础讲解吧…… ObjC有大量与C相同的语法结构,它是对C的一种拓展语言,更加的方便操作和应用。 程序的头文件和源文件的扩展名分别是.h 和.m。而C和C++的扩展名是.h和.cpp。程序的注释语法和C一样,在ObjC中的nil相当于NULL,ObjC中的YES 和 NO 相当于true 和 false。 这里再讲解一下YES 和 NO: ObjC中提供BOOL类型,但是这个BOOL类型和C++中的不一样:在C++中一切非0值的东西都是true,而为0值的都为false。但是ObjC中1为true,并且被宏定义为YES,0为false并被宏定义为NO,所以,如果你将代码写出如下这样,则肯定是错误的: BOOL areIntsDirfferent_faulty(int thing1, int thing2) { return (thing1, thing2); } if(areIntsDirfferent_faulty(23,5) == YES) { } 因为areIntsDirfferent_faulty方法返回的是两个整数的差,这个差不为1,那么永远不会YES。 下来我们看一下ObjC的程序结构: #import<Foundation/Foundation.h> int main(int argc, const char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSLog(@"Programming is fun!"); [pool drain]; return 0; } 程序分析: #import<Foundation/Foundation.h> 相当于#include导入头文件,也有两种查找方式<...>和”...“。导入该头文件是应为在程序结尾处用到的其他类和函数的有关信息。 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; 这条语句为自动释放池在内存中保留了空间,就是在释放内存池的时候同时释放其中的对象,若对象要加入该池,只要发送一条autorelease消息即可。 NSLog(@"Programming is fun!"); 这条语句将显示常量字符串,类似于printf函数,并且会自动在文件后添加'\n'。其中也可以使用转义字符。例如: NSLog(@"The sum of 30 and 23 is %i",sum); [pool drain]; //释放内存池 此格式是ObjC的标准格式: [classOfInstance method]; classOfInstance是类的名称或者该类实例的名称,method是方法(消息)。 在这里提一个获得对象的方法:(从Car类获得其对象) youCar = [Car new]; 这里和C++的有点不同,需要注意! 另外定义一个新类分为两部分: @interface 部分 描述类、类的数据成员部分和类的方法 @implementation 部分 实现这些方法的实际代码 @interface部分的一般格式: @interface NewClassName : ParentClassName { memberDeclarations; } methodDeclarations; @end 命名规则:以字母或者下划线开头,之后可以使任何字母,下划线或者0~9数组组合。 约定:类名必须以大写字母开头,实例变量、对象以及方法的名称以小写字母开始。 每次创建新的对象的时候,将同时创建一组新的实例对象且唯一。 注意:在对象类型的右边都有一个*号,左右的对象变量都是指针类型。ID类型已经被预定义为指针类型,所以不需要加一个*号。 函数开头部分的(-)号或者(+)号表示: (-)号 表示该方法是实例方法(对类的特定势力执行一些操作); (+)号 表示该方法是类的方法(即对类本身执行某些操作的方法,例如创建类的新实例等) 函数的声明示例: -(void)setNumerator : (int) n 第一个表示方法的类型,返回类型,接着是方法名,方法接受的参数,参数的类型,参数名 注:如果不带参数则不适用”:“号 如果没有指定任何返回类型,那么默认是id类型,所有的输入参数默认也是id类型(id类型可用来引用任何类型的对象)。 注:无论在哪里,对象总是携带它的is a 的保护成员(可以用来确定对象所属的类),所以即使将它存储在id类型的通用对象变量中,也总是可以确定它的类的。 具有多个参数的方法: -/+(return type) function_name : (parameter type)parameter1 otherParameter : (parameter_type)parameter2; 如果只有一个参数,在 : 号的后面声明参数的类型和名称;如果有多个参数,每个参数前面都要有一个 : ,然后接着是参数的类型和参数名称。 可能这样不好理解,我们看一个例子: 在C++中带参的函数声明如下: void initializeRectangle(int x1, int y1, int y1, int y2); 但是这样声明有一个缺点,并不知道这些参数的具体含义;但是在ObjC中,可以这样声明: void initalizeRectangle:(int)x1 LeftUpY:(int)y1 RightBottomX:(int)x2 RightBottomY:(int)y2; 这样声明就一目了然了,根据单词的大意就可以理解这些参数的含义了。

转载请注明原文地址: https://www.6miu.com/read-3449935.html

最新回复(0)