`
java-mans
  • 浏览: 11414212 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

在学习了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;
这样声明就一目了然了,根据单词的大意就可以理解这些参数的含义了。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics