那么接着昨天学习的继续学习Obj-C,今天我们就主要来学习下基本的语法。
1. 文件类型
Obj-C是C语言的超集,所以所有C语言里可以支持的语法也同样适用于Obj-C,那么Obj-C中头文件和实现文件的扩展名有以下几种:
.h-----头文件,包括磊、类型、方法以及结构体等
.m-----实现文件,可以保函Obj-C或者C语言代码
.mm----实现文件,C++和Obj-C混合编码
当我们需要在当前文件中引用其他头文件时,可以用#import关键字后面加文件路径进行引用,而且它比#include有一个好处就是可以确保文件不被重复引用。
2. 类的声明
类的定义在Obj-C中包括两个部分:接口部分和实现部分。接口部分包括类的声明、实例变量以及方法定义,那么我们一般就会放在.h文件里,至于实现部分保函类的实际实现代码,一般我们就把它放在.m文件里。那么接下来我们用一个实际的例子来说明一下:
@interface MyClass : NSObject { int count; id data; NSString *name } -(id)initWithStr:(NSString*)aName; +(MyClass)createMyClassWithStr:(NSString*)aName @end
@interface后面紧跟着的就是类名,冒号后面的则是继承的父类。
大括号中间的是成员变量的声明,大括号下面的就是方法声明。
方法返回值前面是“+”的代表是类的方法,是”-“的代表的是类实例的方法。
接下来我们再来看一个书上的代码示例:
@interface Car : NSObject //类名为Car,继承自NSObject { NSString * name; //类的属性,车名 } -(NSString *) name; //类的实例方法 -(void)setName:(NSString *)str; //类的实例方法 -(float)mileFromKilometre: (float)km; //类方法 @end每一个Car的实例都可以调用实例方法,如下所示:
Car*mycar=[[Car alloc]init]; //实例化一个Car的对象 [myCar setName: @"My Benz"]; //调用类的实例方法setName [myCar release]; //释放实例
[Car createMyClassWithStr: 105.6]; //调用类方法上面的例子中,我们首先实例化了一个Car的实例,叫做myCar,myCar可以调用实例方法:setName,但是却不能调用类方法:mileFromKilometre,那么类方法是由类Car直接调用,而不是由实例来调用。
3. 方法和消息
方法的声明主要由方法标识、返回值类型,参数说明关键字、方法名、参数类型以及参数名组成,如下所示:
+(MyClass*)insertObject:(id)anObject atIndex:(NSUInteger)index和C语言或者其他的语言一样,Obj的方法也可以含有多个参数,Obj-C中每一个参数都由一个参数说明关键字,下面是书上的一个计算三角形面积方法的声明实例:
-(int)calculateTriangleAreaWithLength: (int)length Height: (int)height;那么,方法前面的减号表示该方法是实例方法,方法的返回值类型是int整型,calculateTriangleAreaWithLength是方法的名字,同时也包含第一个参数的参数说明关键字。(int)length是第一个参数,类型是int整型。Height是第二个参数的参数说明关键字,最后的(int)height是第二个参数,类型也是int整型。
[myArray insertObject:anObject atIndex:0];
4. 字符串
Obj-C作为C的超集,同样也支持对字符串的定义,单个字符是定义在单引号中,字符串则是定义在双引号中,这点其实跟C#的语法也很像,但是像php或者python的话,那就有些小的区别了,在Obj-C中很多框架对象都是用NSString传递字符串。
Obj-C提供了一个助记符可以很方便的从常量值创建NSString对象,要使用这个助记符所需要做的就是在普通的字符串前面加一个@符号,同样,我们看下具体的实例:
NSString*myStr=@"My String"; //定义字符串常量 NSString*myStr=[NSString stringWithFormat:@"%d %s %@",1,"C String",@"Obj-C String" //字符串格式,等同C语言的字符串格式定义C语言字符串和Obj-C的字符串很相似,用法也基本一致。Obj-C的字符串支持Unicode,可以支持任何语言的字符串,同样,Obj-C也支持同C语言一样的格式定义方式,所有的格式替换符都和C语言的兼容,同时还添加了新的格式替换符"%@"来支持Obj-C字符串。上面的例子中,%d和%s同C语言一样分别替换整型和字符串,%@用来替换Obj-C的字符串。
5. 日志打印
在C语言的开发过程中,开发人员会经常在代码里用printf对日志进行输入,以便debug,那么在Obj-C中,我们可以使用NSLog函数来打印日志,例如:
NSLog(@"log message"); //输出结果为:log message
OK,那么今天基本就先学习到这里,同时因为之前没有怎么学过C语言,那么很多时候对Obj-C这门语言的理解就不会像有过C开发的程序员们那么深刻,除了掌握基本的语法之外,还要进行消化吸收,加以理解。
2013年4月15日,Eric.Tang 记